[
  {
    "path": ".babelrc.js",
    "content": "const env = require('./env-config.js')\n\nmodule.exports = {\n  presets: ['next/babel'],\n  plugins: [\n    [\"prismjs\", {\n        \"languages\": [\"jsx\", \"bash\"]\n    }],\n    ['transform-define', env]\n  ]\n}\n"
  },
  {
    "path": ".gitignore",
    "content": "node_modules\ndist\n.DS_Store\n.env\n*.snap\n.vscode\n*.log\n.next\n"
  },
  {
    "path": ".nvmrc",
    "content": "18\n"
  },
  {
    "path": "blog/announcing-react-pdf-v2.md",
    "content": "export const metadata = {\n  date: '04/06/2021',\n  author: 'diegomura',\n  title: 'Announcing react-pdf v2.0',\n  image: {\n    url: '/images/og-banner-v2.png',\n    width: '950',\n    height: '805'\n  }\n}\n\nI'm very excited to announce **react-pdf 2.0** to the world! This is the culmination of almost an entire year of work and all the lessons learned since this project started [all the way back in October 2016](https://github.com/diegomura/react-pdf/commit/272212a6847ad737be8241c64dbca7ad5a95ae8e). It's crazy, I feel it was just yesterday when [I was announcing 1.0 as well](https://twitter.com/diegomura/status/1070743817232494592).\n\nIn essence, this new 2.0 version is a full reimplementation of the library. Starting from scratch is always a risky move, especially when the previous version is stable and being used in production by many companies and developers. However, the more I thought about it, the more it made sense to go down this path. In this blog post, I would like to tell you about ideas behind the v2 and the problems it solves.\n\n**TL;DR** - React-pdf 2.0 is backwards compatible with v1, so you don't need to change anything from your existing project to start using it. If you're not interested in what changed internally, you can jump straight to the [what's new](#what's-new) or the [FAQ](#faq) section.\n\n## Motivation\n\n### 1. Separate Layout from Rendering\n\nSimilarly to how web browsers work, react-pdf has two very distinguishable steps.\n\nThe first is **layout**, the process of computing the coordinates of each node inside the document, transforming text into glyphs, computing image sizes, and anything in between. To keep concerns separated, it's very important for the layout process to be PDF agnostic, this means, not having to deal with the underlying complexities of the PDF format.\n\nAfter layout is computed, then we can move to the **rendering** phase, which is essentially drawing the nodes in the target PDF document. This step takes all the layout data for granted, it's all about dealing with PDF specific stuff, rendering borders, backgrounds, images, text, etc.\n\nYou can see the benefits of having these two steps separate right away: easier development, testing and debugging, and even having the ability to export not just PDF but any other format in the future. However, in previous react-pdf implementations there was no code separation of these concerns whatsoever. Each node was responsible for how it should layout and render, implemented in the same place. Not to mention that creating the PDF instance was the first thing we did, and it wasn't used until the very end of the entire process. This needed to change.\n\n### 2. Embracing Immutability\n\nOne of the main causes of issues right now is dealing with the mutable nature of `react-reconciler` while having an asynchronous rendering process. The reconciler is React's piece responsible for transforming the JSX code into calls to the underlying platform you are working on. If you think about react-dom or react-native, mutability makes sense: you create native views once, and then it's all about changing those instances (e.g. changing some styling when the JSX changes). There's a state being shared in successive reconciler calls.\n\nPDFs are different. When anything inside the document changes, we need to recompute the entire document. There's no way to just \"change the color of a PDF text\" and keep everything else the same.\n\nPrevious react-pdf versions dealt with this by keeping class instances in memory that knew how to clone themselves in some very complex ways, so each successive render could be \"independent\" from the previous one but also share these instances. Working with this, however, had become increasingly hard and was the cause of many bugs that were very difficult to track down.\n\nUnder this perspective, immutability is a must have. If I could find a way of making the renderer work with immutable structures, it would not only make bugs easier to find, but also make each render truly independent from the previous or future ones.\n### 3. Performance Boost\n\nI believe react-pdf could be much much faster than what the v1 currently is. Although it's already faster than other solutions out there, such as HTML-to-PDF for most use cases, my goal is to keep pushing this to the limit.\n\nThere are some bottlenecks we can't avoid, such as assets fetching or Yoga layout time, but there's a lot of room for improvements. The old implementation made it very difficult to both measure and improve rendering times, at least without the risk of breaking something along the way.\n\n### 4. Better Testing\n\nNo need to explain the benefits of having extensive tests for an open-source library, especially those like react-pdf that support so many different features and CSS properties. Even though previous versions have many features tested, it was only possible to accomplish this by basically simulating an entire document from the top and seeing how it turned out to be. Doing that to test a simple margin is just too much.\n\n## Solution\n\nEnough talking about problems. Let's now move onto solutions.\n\n### 1. Redefining Rendering Process\n\nMost of the points mentioned above were only visible after having experienced how this library evolved over time, and spending a lot of time developing it and understanding what the pain points were. So I asked myself: knowing what I now know about this library, what would I've done differently? The first thing would've been rethinking the whole rendering process.\n\nAs mentioned above, splitting layout from rendering makes a lot of sense. This could be easily achieved by moving all the PDF related logic to the end of the document creation pipeline. This also has an incredibly powerful side-effect: being able to produce other types of output besides PDF documents. Suddenly, a whole world of new possibilities opened in front of our eyes.\n\nAdditionally, separating the text layout process from the rest of the pipeline turned out to be very helpful. Text layout is an incredibly complex task by itself, since it involves transforming chars into glyphs with the provided font, grouping those glyphs into lines intelligently, breaking words between lines, dealing with ligatures, orphan & widow protection, and the list goes on and on.\n\n### 2. Functional Approach\n\nIt's not that I dislike classes, but I believe that functional programming paradigms can help a lot in breaking the whole rendering process into smaller and testable bits. Functions are generally easier to understand, since they are all about inputs and outputs. Immutability is generally very easy to enforce as well.\n\nWe were already following this approach on textkit, the library responsible for performing text layout, and the benefits were just amazing. Rarely something bad was reported about it, and it has a test coverage that with the current way of testing would've been simply impossible to achieve.\n\nAt the same time, this meant having to rewrite or at least re-organize much of the logic, which is mostly unchanged. It was daunting at first, and I was afraid of the criticism if things that worked suddenly did not. Hopefully it will pay off.\n\n## What's New\n\nBut this new version is not just about internal changes! It also ships a lot of new features that are ready to use out of the box.\n\n### SVG Support\n\nReact-pdf now ships with a set of new primitives to render SVG images! This has been on the backburner since the beginning of this project, postponed for several different reasons throughout the years for it being challenging to implement with the previous implementation.\n\nAnd this is HUGE. Having SVG support opens this library to a whole new world of possibilities. This doesn't just mean being able to render your own SVG (such as your company logo or similar), but also building integrations with pre-existing libraries that output SVG, such as the popular chart library recharts. As a future reference, just bear in mind that react-pdf does not take the same React SVG primitives but their own, so you will need to transform from one to the other. Should be as simple as cloning elements.\n\nYou can see this working [here](http://react-pdf.org/repl?example=svg).\n\n### New Hook API\n\nReact-pdf always tried to as simple to use as possible, without compromising flexibility and covering many different use cases. To achieve that, it ships with a `<PDFViewer />` component for those who just want to see the document in the browser, and `<BlobProvider />` and `<PDFDownloadLink />` for more complex and custom interactions. However, it felt that something was missing.\n\nBecause of that, react-pdf 2.0 introduces a `usePDF` hook to fill the remaining needs. Through it, you can access the blob, url and loading state of your document, and more importantly, have a finer control over when the document should re-render. That's something that wasn't possible before. I'm excited to see what interactions people build using this new API.\n\nRead more about the new `usePDF` hook [here](http://react-pdf.org/hooks).\n\n### More styles supported\n\nLast but not least, a bunch of new CSS properties are supported, and more to come. New features include:\n\n- Rgb, rgba and cmyk color\n- Overflow\n- zIndex\n- Percent border radius\n- Better unit support\n\n## Acknowledges\n\nI would like to especially thank all the people that helped accomplish such an important milestone for this library. There were more than 39 people that participated on the [2.0 pull request](https://github.com/diegomura/react-pdf/pull/617), discussing different approaches, helping testing and patiently waiting for this work to be finished. That was truly amazing and something I didn't expect when I started working on this. It's definitely not always easy to keep up with all the work this library demands, but other people's involvement in the project makes it way more enjoyable to work on.\n\nIn addition, as a reminder for anyone using or excited about this project, kindly consider [donating to react-pdf](https://opencollective.com/react-pdf). It really makes the difference, helping this project to keep moving forward.\n\n## FAQ\n\n### Is the new version going to be incompatible with the old one?\n\nNo! 2.0 will be backwards compatible. Because of this, there should be no reason to remain on v1. Please report any bugs to our issue tracker, preferably with a REPL link.\n\n### Will the v1.X version still be maintained after 2.0 gets released?\n\nUnfortunately, no. If it's just a simple change or fix, a patch to v1 will definitely be released (especially during the transition to 2.0), but no major feature will be added to it. That is mostly due to a lack of time on my end. I hope we can focus efforts on the next version, which is better in many ways.\n"
  },
  {
    "path": "docs/advanced.md",
    "content": "import EditButton from '../src/components/Docs/EditButton'\nimport NavigationButtons from '../src/components/Docs/NavigationButtons'\n\nimport PageWrapping from './page-wrapping.md'\nimport DocumentNavigation from './document-navigation.md'\nimport OnTheFly from './on-the-fly.md'\nimport OrphanWidowProtection from './orphan-widow-protection.md'\nimport DynamicContent from './dynamic-content.md'\nimport Hyphenation from './hyphenation.md'\nimport Debugging from './debugging.md'\nimport Express from './express.md'\nimport WebWorkers from './web-workers.md'\nimport Math from './math.md'\n\n<EditButton to=\"https://github.com/react-pdf/site/blob/master/docs/advanced.md\" />\n\n## Advanced\n\n<PageWrapping components={components} />\n<DocumentNavigation components={components} />\n<OnTheFly components={components} />\n<OrphanWidowProtection components={components} />\n<DynamicContent components={components} />\n<Debugging components={components} />\n<Hyphenation components={components} />\n<Express components={components} />\n<WebWorkers components={components} />\n<Math components={components} />\n\n<NavigationButtons\n  backSrc=\"/styling\"\n  backText=\"Styling\"\n  nextSrc=\"/repl\"\n  nextText=\"REPL\"\n/>\n"
  },
  {
    "path": "docs/compatibility.md",
    "content": "import EditButton from '../src/components/Docs/EditButton'\nimport NavigationButtons from '../src/components/Docs/NavigationButtons'\n\n### Compatibility with Node.js\n\nWe currently test react-pdf against Node.js 18, 20, and 21 (latest minors), so these are the versions we recommend using. Chances are you may use react-pdf with older versions of Node.js as well, but we can't guarantee it will work as expected.\n\n### Compatibility with Bun\n\nWhile we don't officially support Bun, we have received reports that it works well with react-pdf.\n\n### Compatibility with React\n\n`@react-pdf/renderer` is compatible with React 16 (16.8.0 or later), React 17, React 18 and React 19 (since v4.1.0)\n\n### Compatibility with Next.js\n\nIn general, you may use react-pdf with Next.js regardless of the version. However, before Next.js 14.1.1, Next.js (App Router) suffered from a bug that caused the Next.js server to crash when using react-pdf. If you encounter:\n\n```\nTypeError: ba.Component is not a constructor\n```\n\nYou should upgrade to Next.js 14.1.1 or later.\n\nIf that's not possible, update your Next.js config like this:\n\n```js\nconst nextConfig = {\n  // …\n  experimental: {\n    // …\n    serverComponentsExternalPackages: ['@react-pdf/renderer'],\n  },\n};\n```\n\n### Compatibility with esbuild\n\nIf you are using esbuild to bundle your react-pdf application in ESM mode, you may encounter an error:\n\n```\n__dirname is not defined in ES module scope\n```\n\nThis is because our dependency, [Yoga layout](https://yogalayout.com/), uses `__dirname` in their code.\n\nThis will be fixed by the upcoming release of Yoga layout, but for now, you can work around this issue by using the `inject` option in esbuild.\n\nCreate a file called `cjs-shim.ts`:\n\n```ts\nimport { createRequire } from 'node:module';\nimport path from 'node:path';\nimport url from 'node:url';\n\nglobalThis.require = createRequire(import.meta.url);\nglobalThis.__filename = url.fileURLToPath(import.meta.url);\nglobalThis.__dirname = path.dirname(__filename);\n```\n\nThen, add it to your `esbuild.ts`:\n\n```ts\nawait esbuild.build({\n  // …\n  inject: ['cjs-shim.ts'],\n});\n```\n\nAnd you should be good to go!\n\n<NavigationButtons\n  nextSrc=\"/rendering-process\"\n  nextText=\"Rendering process\"\n/>\n"
  },
  {
    "path": "docs/components.md",
    "content": "import EditButton from '../src/components/Docs/EditButton'\nimport NavigationButtons from '../src/components/Docs/NavigationButtons'\n\n<EditButton to=\"https://github.com/react-pdf/site/blob/master/docs/components.md\" />\n\n## Components\n\nReact-pdf follows the [React primitives](https://github.com/lelandrichardson/react-primitives) specification, making the learning process very straightforward if you come from another React environment (such as react-native). Additionally, it implements custom Component types that allow you to structure your PDF document.\n\n### Document\n\nThis component represents the PDF document itself. It _must_ be the root of your tree element structure, and under no circumstances should it be used as child of another react-pdf component. In addition, it should only have children of type `<Page />`.\n\n#### Valid props\n\n| Prop name  |                               Description                               |                                      Type |       Default |\n|------------|:-----------------------------------------------------------------------:|------------------------------------------:|--------------:|\n| title      |               Sets title info on the document's metadata                |                                  _String_ |   _undefined_ |\n| author     |               Sets author info on the document's metadata               |                                  _String_ |   _undefined_ |\n| subject    |              Sets subject info on the document's metadata               |                                  _String_ |   _undefined_ |\n| keywords   |        Sets keywords associated info on the document's metadata         |                                  _String_ |   _undefined_ |\n| creator    |              Sets creator info on the document's metadata               |                                  _String_ | _\"react-pdf\"_ |\n| producer   |              Sets producer info on the document's metadata              |                                  _String_ | _\"react-pdf\"_ |\n| pdfVersion |                 Sets PDF version for generated document                 |                                  _String_ |       _\"1.3\"_ |\n| language   |                        Sets PDF default language                        |                                  _String_ |   _undefined_ |\n| pageMode   |       Specifying how the document should be displayed when opened       |     [PageMode](/components#pagemode-type) |     _useNone_ |\n| pageLayout |        This controls how (some) PDF viewers choose to show pages        | [PageLayout](/components#pagelayout-type) |  _singlePage_ |\n| creationDate | Sets the creation date on the document's metadata | _Date_ | _undefined_ |\n| modificationDate | Sets the modification date on the document's metadata | _Date_ | _undefined_ |\n| ownerPassword | Sets an owner password on the document. Owner password is required for setting permissions | _String_ | _undefined_ |\n| userPassword | Sets a user password on the document. When set, viewers will ask for the password before opening the file | _String_ | _undefined_ |\n| permissions | Defines document permissions. Requires `ownerPassword` to be set. [See more](/components#permissions-type) | [Permissions](/components#permissions-type) | _undefined_ |\n| onRender   | Callback after document renders. Receives document blob argument in web |                                _Function_ |   _undefined_ |\n\n##### PageMode type\n\n`pageMode` prop can take one of the following values. Take into account some viewers might ignore this setting.\n\n| Value          |                                   Description                                    |\n|----------------|:--------------------------------------------------------------------------------:|\n| useNone        |             Neither document bookmarks nor thumbnail images visible              |\n| useOutlines    |                            Document bookmarks visible                            |\n| useThumbs      |                             Thumbnail images visible                             |\n| fullScreen     | Full-screen mode, with no menu bar, window controls, or any other window visible |\n| useOC          |                       Optional content group panel visible                       |\n| useAttachments |                            Attachments panel visible                             |\n\n##### Permissions type\n\n`permissions` prop accepts an object with the following optional boolean fields. All default to `true` when an owner password is set without specifying permissions.\n\n| Value                  |                             Description                             |\n|------------------------|:-------------------------------------------------------------------:|\n| printing               |           Whether the user can print the document                   |\n| modifying              |           Whether the user can modify the document                  |\n| copying                |        Whether the user can copy text and images                    |\n| annotating             |       Whether the user can add or modify annotations                |\n| fillingForms           |           Whether the user can fill in form fields                  |\n| contentAccessibility   | Whether content can be extracted for accessibility purposes         |\n| documentAssembly       | Whether the user can assemble the document (insert, rotate, delete pages) |\n\n##### PageLayout type\n\n`pageLayout` prop can take one of the following values. Take into account some viewers might ignore this setting.\n\n| Value          |                              Description                               |\n|----------------|:----------------------------------------------------------------------:|\n| singlePage     |                       Display one page at a time                       |\n| oneColumn      |                    Display the pages in one column                     |\n| twoColumnLeft  | Display the pages in two columns, with odd numbered pages on the left  |\n| twoColumnRight | Display the pages in two columns, with odd numbered pages on the right |\n| twoPageLeft    |  Display the pages two at a time, with odd-numbered pages on the left  |\n| twoPageRight   | Display the pages two at a time, with odd-numbered pages on the right  |\n\n---\n\n### Page\n\nRepresents single page inside the PDF documents, or a subset of them if using the wrapping feature. A `<Document />` can contain as many pages as you want, but ensures not rendering a page inside any component besides Document.\n\n#### Valid props\n\n| Prop name   |                                                                                                         Description                                                                                                         |                                            Type |      Default |\n|-------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|------------------------------------------------:|-------------:|\n| size        | Defines page size. If _String_, must be one of the [available page sizes](https://github.com/diegomura/react-pdf/blob/master/packages/layout/src/page/getSize.ts). Height is optional, if ommited it will behave as \"auto\". |           _String_, _Array_, _Number_, _Object_ |       _\"A4\"_ |\n| orientation |                                                                             Defines page orientation. _Valid values: \"portrait\" or \"landscape\"_                                                                             |                                        _String_ | _\"portrait\"_ |\n| wrap        |                                                                          Enables page wrapping for this page. [See more](/advanced#page-wrapping)                                                                           |                                       _Boolean_ |       _true_ |\n| style       |                                                                                          Defines page styles. [See more](/styling)                                                                                          |                               _Object_, _Array_ |  _undefined_ |\n| debug       |                                                                          Enables debug mode on page bounding box. [See more](/advanced#debugging)                                                                           |                                       _Boolean_ |      _false_ |\n| dpi         |                                                                                       Enables setting a custom DPI for page contents.                                                                                       |                                        _Number_ |         _72_ |\n| id          |                                                                             Destination ID to be linked to. [See more](/advanced#destinations)                                                                              |                                        _String_ |  _undefined_ |\n| bookmark    |                                                                                 Attach bookmark to element. [See more](/advanced#bookmarks)                                                                                 | _String_ or [Bookmark](/advanced#bookmark-type) |  _undefined_ |\n\n---\n\n### View\n\nThe most fundamental component for building a UI and is designed to be nested inside other views and can have 0 to many children.\n\n#### Valid props\n\n| Prop name |                                  Description                                   |                                            Type |     Default |\n|-----------|:------------------------------------------------------------------------------:|------------------------------------------------:|------------:|\n| wrap      | Enable/disable page wrapping for element. [See more](/advanced#page-wrapping)  |                                       _Boolean_ |      _true_ |\n| style     |                   Defines view styles. [See more](/styling)                    |                               _Object_, _Array_ | _undefined_ |\n| render    | Render dynamic content based on context. [See more](/advanced#dynamic-content) |                                      _Function_ | _undefined_ |\n| debug     |    Enables debug mode on view bounding box. [See more](/advanced#debugging)    |                                       _Boolean_ |     _false_ |\n| fixed     |   Render component in all wrapped pages. [See more](/advanced#page-wrapping)   |                                       _Boolean_ |     _false_ |\n| id        |       Destination ID to be linked to. [See more](/advanced#destinations)       |                                        _String_ | _undefined_ |\n| bookmark  |          Attach bookmark to element. [See more](/advanced#bookmarks)           | _String_ or [Bookmark](/advanced#bookmark-type) | _undefined_ |\n\n---\n\n### Image\n\nA React component for displaying network or local (Node only) JPG or PNG images, as well as base64 encoded image strings.\n\n#### Valid props\n\n| Prop name |                                 Description                                 |                                            Type |     Default |\n|-----------|:---------------------------------------------------------------------------:|------------------------------------------------:|------------:|\n| src       |         Source of the image. [See more](/components#source-object)          |                                 _Source object_ | _undefined_ |\n| source    |            Alias of _src_. [See more](/components#source-object)            |                                 _Source object_ | _undefined_ |\n| style     |                  Defines view styles. [See more](/styling)                  |                               _Object_, _Array_ | _undefined_ |\n| debug     |  Enables debug mode on view bounding box. [See more](/advanced#debugging)   |                                       _Boolean_ |     _false_ |\n| fixed     | Renders component in all wrapped pages. [See more](/advanced#page-wrapping) |                                       _Boolean_ |     _false_ |\n| cache     |              Enables image caching between consecutive renders              |                                       _Boolean_ |      _true_ |\n| srcSet    | Responsive image sources for resolution-based selection. E.g. `\"small.jpg 300w, medium.jpg 600w\"` | _String_ | _undefined_ |\n| sizes     |              Display width used for `srcSet` source selection               |                            _String_, _Number_ | _undefined_ |\n| bookmark  |         Attach bookmark to element. [See more](/advanced#bookmarks)         | _String_ or [Bookmark](/advanced#bookmark-type) | _undefined_ |\n\n##### Source object\n\nDefines the source of an image. Can be in any of these four valid forms:\n\n| Form type   |                                                             Description                                                             | Example                                                    |\n|-------------|:-----------------------------------------------------------------------------------------------------------------------------------:|------------------------------------------------------------|\n| String      |                                           Valid image URL or filesystem path (Node only)                                            | `www.react-pdf.org/test.jpg`                               |\n| URL object  |                                       Enables to pass extra parameters on how to fetch images                                       | `{ uri: valid-url, method: 'GET', headers: {}, body: '', credentials: 'include' }` |\n| Buffer      |                   Renders image directly from Buffer. Image format (png or jpg) will be guessed based on Buffer.                    | `Buffer`                                                   |\n| Data buffer | Renders buffer image via the _data_ key. It's also recommended to provide the image _format_ so the engine knows how to proccess it | `{ data: Buffer, format: 'png' \\| 'jpg' }`                 |\n| Function    |                    A function that returns (can also return a promise that resolves to) any of the above formats                    | `() => String \\| Promise<String>`                          |\n\n---\n\n### ImageBackground\n\nA React component for displaying an image behind child content. It works like `Image` but acts as a container — any children are rendered on top of the image.\n\n#### Valid props\n\n| Prop name  |                                 Description                                 |                                            Type |     Default |\n|------------|:---------------------------------------------------------------------------:|------------------------------------------------:|------------:|\n| src        |         Source of the image. [See more](/components#source-object)          |                                 _Source object_ | _undefined_ |\n| source     |            Alias of _src_. [See more](/components#source-object)            |                                 _Source object_ | _undefined_ |\n| style      |                  Defines view styles. [See more](/styling)                  |                               _Object_, _Array_ | _undefined_ |\n| imageStyle |              Defines styles applied to the background image                 |                               _Object_, _Array_ | _undefined_ |\n| debug      |  Enables debug mode on view bounding box. [See more](/advanced#debugging)   |                                       _Boolean_ |     _false_ |\n| fixed      | Renders component in all wrapped pages. [See more](/advanced#page-wrapping) |                                       _Boolean_ |     _false_ |\n| cache      |              Enables image caching between consecutive renders              |                                       _Boolean_ |      _true_ |\n| srcSet     | Responsive image sources for resolution-based selection                     |                                        _String_ | _undefined_ |\n| sizes      |              Display width used for `srcSet` source selection               |                            _String_, _Number_ | _undefined_ |\n| bookmark   |         Attach bookmark to element. [See more](/advanced#bookmarks)         | _String_ or [Bookmark](/advanced#bookmark-type) | _undefined_ |\n\n---\n\n### Text\n\nA React component for displaying text. Text supports nesting of other Text or Link components to create inline styling.\n\n#### Valid props\n\n| Prop name           |                                       Description                                       |                                            Type |     Default |\n|---------------------|:---------------------------------------------------------------------------------------:|------------------------------------------------:|------------:|\n| wrap                |     Enables/disables page wrapping for element. [See more](/advanced#page-wrapping)     |                                       _Boolean_ |      _true_ |\n| render              |     Renders dynamic content based on context. [See more](/advanced#dynamic-content)     |                                      _Function_ | _undefined_ |\n| style               |                        Defines view styles. [See more](/styling)                        |                               _Object_, _Array_ | _undefined_ |\n| debug               |        Enables debug mode on view bounding box. [See more](/advanced#debugging)         |                                       _Boolean_ |     _false_ |\n| fixed               |       Renders component in all wrapped pages. [See more](/advanced#page-wrapping)       |                                       _Boolean_ |     _false_ |\n| hyphenationCallback | Specify hyphenation callback at a text level. See [hypthenation](/advanced#hyphenation) |                                      _Function_ | _undefined_ |\n| id                  |           Destination ID to be linked to. [See more](/advanced#destinations)            |                                        _String_ | _undefined_ |\n| bookmark            |               Attach bookmark to element. [See more](/advanced#bookmarks)               | _String_ or [Bookmark](/advanced#bookmark-type) | _undefined_ |\n\n---\n\n### Link\n\nA React component for displaying an hyperlink. Link’s can be nested inside a Text component, or being inside any other valid primitive.\n\n#### Valid props\n\n| Prop name |                                          Description                                          |                                            Type |     Default |\n|-----------|:---------------------------------------------------------------------------------------------:|------------------------------------------------:|------------:|\n| src       | Valid URL or destination ID. ID must be prefixed with `#`. [See more](/advanced#destinations) |                                        _String_ | _undefined_ |\n| href      | Alias of _src_. Valid URL for external links                                                  |                                        _String_ | _undefined_ |\n| wrap      |         Enable/disable page wrapping for element. [See more](/advanced#page-wrapping)         |                                       _Boolean_ |      _true_ |\n| style     |                           Defines view styles. [See more](/styling)                           |                               _Object_, _Array_ | _undefined_ |\n| debug     |           Enables debug mode on view bounding box. [See more](/advanced#debugging)            |                                       _Boolean_ |     _false_ |\n| fixed     |          Render component in all wrapped pages. [See more](/advanced#page-wrapping)           |                                       _Boolean_ |     _false_ |\n| hitSlop   | Expands the clickable area beyond the visible bounds of the link | _Number_ or _Object_ `{ top, bottom, left, right }` | _undefined_ |\n| bookmark  |                  Attach bookmark to element. [See more](/advanced#bookmarks)                  | _String_ or [Bookmark](/advanced#bookmark-type) | _undefined_ |\n\n---\n\n### Note\n\nA React component for displaying a note annotation inside the document.\n\n#### Valid props\n\n| Prop name |                                 Description                                 |              Type |     Default |\n|-----------|:---------------------------------------------------------------------------:|------------------:|------------:|\n| style     |                  Defines view styles. [See more](/styling)                  | _Object_, _Array_ | _undefined_ |\n| children  |                             Note string content                             |          _String_ | _undefined_ |\n| fixed     | Renders component in all wrapped pages. [See more](/advanced#page-wrapping) |         _Boolean_ |     _false_ |\n\n---\n\n### Canvas\n\nA React component for freely drawing any content on the page.\n\n#### Valid props\n\n| Prop name |                                 Description                                 |                                            Type |     Default |\n|-----------|:---------------------------------------------------------------------------:|------------------------------------------------:|------------:|\n| style     |                  Defines view styles. [See more](/styling)                  |                               _Object_, _Array_ | _undefined_ |\n| paint     |                              Painter function                               |                                      _Function_ | _undefined_ |\n| debug     |  Enables debug mode on view bounding box. [See more](/advanced#debugging)   |                                       _Boolean_ |     _false_ |\n| fixed     | Renders component in all wrapped pages. [See more](/advanced#page-wrapping) |                                       _Boolean_ |     _false_ |\n| bookmark  |         Attach bookmark to element. [See more](/advanced#bookmarks)         | _String_ or [Bookmark](/advanced#bookmark-type) | _undefined_ |\n\nReact-pdf does not check how much space your drawing takes, so make sure you always define a `width` and `height` on the `style` prop.\n\n##### Painter function\n\nProp used to perform drawings inside the Canvas. It takes 3 arguments:\n\n- `Painter object`: Wrapper around _pdfkit_ drawing methods. Use this to draw inside the Canvas\n- `availableWidth`: Width of the Canvas element.\n- `availableHeight`: Height of the Canvas element.\n\n##### Painter object\n\nWrapper around _pdfkit_ methods you can use to draw inside the Canvas. All operations are chainable. For more information about how these methods work, please refer to [pdfkit documentation](http://pdfkit.org/).\n\nAvailable methods:\n\n- dash\n- clip\n- save\n- path\n- fill\n- font\n- text\n- rect\n- scale\n- moveTo\n- lineTo\n- stroke\n- rotate\n- circle\n- lineCap\n- opacity\n- ellipse\n- polygon\n- restore\n- lineJoin\n- fontSize\n- fillColor\n- lineWidth\n- translate\n- miterLimit\n- strokeColor\n- fillOpacity\n- roundedRect\n- strokeOpacity\n- bezierCurveTo\n- quadraticCurveTo\n- linearGradient\n- radialGradient\n\n---\n\n### PDFViewer `Web only`\n\nIframe PDF viewer for client-side generated documents.\n\n#### Valid props\n\n| Prop name   |                       Description                        |               Type |     Default |\n|-------------|:--------------------------------------------------------:|-------------------:|------------:|\n| style       |                  Defines iframe styles                   |  _Object_, _Array_ | _undefined_ |\n| className   |                Defines iframe class name                 |          _String _ | _undefined_ |\n| children    |               PDF document implementation                |         _Document_ | _undefined_ |\n| width       |               Width of embedded PDF iframe               | _String_, _Number_ | _undefined_ |\n| height      |              Height of embedded PDF iframe               | _String_, _Number_ | _undefined_ |\n| innerRef    | Ref to the underlying iframe element                     |              _Ref_ | _undefined_ |\n| showToolbar | Render the toolbar. Supported on Chrome, Edge and Safari |          _Boolean_ |      _true_ |\n\nOther props are passed through to the iframe.\n\n---\n\n### PDFDownloadLink `Web only`\n\nAnchor tag to enable generate and download PDF documents on the fly.\nRefer to [on the fly rendering](/advanced#on-the-fly-rendering) for more information.\n\n#### Valid props\n\n| Prop name |          Description          |                   Type |     Default |\n|-----------|:-----------------------------:|-----------------------:|------------:|\n| document  |  PDF document implementation  |             _Document_ | _undefined_ |\n| fileName  |    Download PDF file name     |               _String_ | _undefined_ |\n| style     |   Defines anchor tag styles   |      _Object_, _Array_ | _undefined_ |\n| className | Defines anchor tag class name |               _String_ | _undefined_ |\n| children  |      Anchor tag content       | _DOM node_, _Function_ | _undefined_ |\n| onClick   | Click handler. Receives click event and PDF instance as arguments | _Function_ | _undefined_ |\n\n---\n\n### BlobProvider `Web only`\n\nEasy and declarative way of getting document's blob data without showing it on screen.\nRefer to [on the fly rendering](/advanced#on-the-fly-rendering) for more information.\n\n#### Valid props\n\n| Prop name |                           Description                            |       Type |     Default |\n|-----------|:----------------------------------------------------------------:|-----------:|------------:|\n| document  |                   PDF document implementation                    | _Document_ | _undefined_ |\n| children  | Render prop with blob, url, error and loading state as arguments | _Function_ | _undefined_ |\n\n---\n\n<NavigationButtons\n  backSrc=\"/rendering-process\"\n  backText=\"Rendering process\"\n  nextSrc=\"/svg\"\n  nextText=\"SVG\"\n/>\n"
  },
  {
    "path": "docs/debugging.md",
    "content": "import DebugSample from '../src/components/Docs/DebugSample'\nimport GoToExample from '../src/components/Docs/GoToExample'\n\n### Debugging\n\nReact-pdf ships a built-in debugging system you can use whenever you have doubts about how elements are being laid out on the page. All you have to do is to set the `debug` prop to `true` on any valid primitive (except _Document_) and re-render the document to see the result on the screen.\n\n<DebugSample />\n\n<GoToExample name=\"debugging\" />\n\n---\n"
  },
  {
    "path": "docs/document-navigation.md",
    "content": "### Document Navigation\n\nThere are two main ways to make a document navigable:\n\n#### Destinations `v2.0.0`\n\nDestinations are the simplest form of navigation. They allow to create interactive links that take the user directly to the defined place within the document.\n\nA destination can be created by setting the `id` prop to a _String_ on any supported element ([see more](/components)). After that, the destination can be linked to by setting the `src` prop on the `<Link />` element to the same _String_, but with the leading hash (`#`) symbol:\n\n```js\nimport { Document, Link, Page, Text } from '@react-pdf/renderer'\n\nconst doc = () => (\n  <Document>\n    <Page>\n      <Link src='#Footnote'> // Notice the hash symbol\n        Click me to get to the footnote\n      </Link>\n\n      // Other content here\n\n      <Text id='Footnote'> // No hash symbol\n        You are here because you clicked the link above\n      </Text>\n    </Page>\n  </Document>\n);\n```\n\n#### Bookmarks `v2.2.0`\n\nBookmarks allow the user to navigate interactively from one part of the document to another. They form a tree-structured hierarchy of items, which serve as a visual table of contents to display the document’s structure to the user.\n\nA bookmark can be defined by the `bookmark` prop on any of the supported components ([see more](/components)), and can take the form of either a _String_ or a _Bookmark_ type\n\n```js\nimport { Document, Page, Text } from '@react-pdf/renderer'\n\nconst doc = () => (\n  <Document>\n    <Page bookmark=\"Harry Potter and the Philosopher's Stone\">\n     <Text bookmark={{ title: \"Chapter 1: The Boy Who Lived\", fit: true }}>{...}</Text>\n    </Page>\n  </Document>\n);\n```\n\nThe example above will create a table of content of 2 nested items: The parent will be the book's name, and the child the chapter's name. You can nest as many bookmarks as you want.\n\nNote that some older PDF viewers may not support bookmarks.\n\n##### Bookmark type\n\nObject that matches the following schema:\n\n| Value                 |                                     Description                                     |      Type |\n|-----------------------|:-----------------------------------------------------------------------------------:|----------:|\n| title                 |                                   Bookmark value                                    |  _String_ |\n| top _(Optional)_      |  Y coodinate from the document top edge where user get's redirected. Defaults to 0  |  _Number_ |\n| left _(Optional)_     |  X coodinate from the document top edge where user get's redirected. Defaults to 0  |  _Number_ |\n| zoom _(Optional)_     |                  Reader zoom value after clicking on the bookmark                   |  _Number_ |\n| fit _(Optional)_      |                       Redirect user to the start of the page                        | _Boolean_ |\n| expanded _(Optional)_ | Viewer should expand tree node in table of contents (not supported in some viewers) | _Boolean_ |\n\n---\n"
  },
  {
    "path": "docs/dynamic-content.md",
    "content": "import GoToExample from '../src/components/Docs/GoToExample'\n\n### Dynamic content\n\nWith react-pdf, now it is possible to render dynamic text based on the context in which a certain element is being rendered. All you have to do is to pass a function to the `render` prop of the `<Text />` or `<View />` component. The result will be rendered inside the text block as a child.\n\n```\nimport { Document, Page } from '@react-pdf/renderer'\n\nconst doc = () => (\n  <Document>\n    <Page wrap>\n      <Text render={({ pageNumber, totalPages }) => (\n        `${pageNumber} / ${totalPages}`\n      )} fixed />\n\n      <View render={({ pageNumber }) => (\n        pageNumber % 2 === 0 && (\n          <View style={{ background: 'red' }}>\n            <Text>I'm only visible in odd pages!</Text>\n          </View>\n        )\n      )} />\n    </Page>\n  </Document>\n);\n```\n\n#### Available arguments\n\n| Name                          |                 Description                 |      Type |\n| ----------------------        | :-----------------------------------------: | --------: |\n| pageNumber                    |             Current page number             | _Integer_ |\n| totalPages `Text only`        | Total amount of pages in the final document | _Integer_ |\n| subPageNumber                 | Current subpage in the Page component       | _Integer_ |\n| subPageTotalPages `Text only` | Total amount of pages in the Page component | _Integer_ |\n\nBear in mind that the `render` function is called twice for `<Text />` elements: once for layout on the page wrapping process, and another one after it's know how many pages the document will have.\n\n> **Protip:** Use this API in conjunction with fixed elements to render page number indicators\n\n<GoToExample name=\"page-numbers\" />\n\n---\n"
  },
  {
    "path": "docs/express.md",
    "content": "### Usage with Express.js `node only`\n\n```jsx\nimport React from 'react';\nimport ReactPDF from '@react-pdf/renderer';\n\nconst pdfStream = await ReactPDF.renderToStream(<MyDocument />);\nres.setHeader('Content-Type', 'application/pdf');\npdfStream.pipe(res);\npdfStream.on('end', () => console.log('Done streaming, response sent.'));\n```\n"
  },
  {
    "path": "docs/fonts.md",
    "content": "import EditButton from '../src/components/Docs/EditButton'\nimport GoToExample from '../src/components/Docs/GoToExample'\nimport NavigationButtons from '../src/components/Docs/NavigationButtons'\n\n<EditButton to=\"https://github.com/react-pdf/site/blob/master/docs/fonts.md\" />\n\n## Fonts\n\nReact-pdf is shipped with a `Font` module that enables to load fonts from different sources, handle how words are wrapped and defined an emoji source to embed these glyphs on your document.\n\nYou can define multiple sources for the same font family, each with a different `fontStyle` or `fontWeight`. React-pdf will pick the appropriate font for each `<Text />` based on its style and the registered fonts.\n\nCurrently, \n- [only TTF and WOFF fonts files are supported](https://github.com/diegomura/react-pdf/issues/334). A list of available TTF fonts from Google can be found [here](https://gist.github.com/sadikay/d5457c52e7fb2347077f5b0fe5ba9300).\n- Any OpenType Variable fonts (such as Noto Sans variable weights font) does not work properly because PDF 2.0 spec does not support those. It is required to register separate fonts using 'fonts' property (explained in below).\n\n```\nimport { StyleSheet, Font } from '@react-pdf/renderer'\n\n// Register font\nFont.register({ family: 'Roboto', src: source });\n\n// Reference font\nconst styles = StyleSheet.create({\n  title: {\n    fontFamily: 'Roboto'\n  }\n})\n```\n\n---\n\n### `register`\n\nFonts really make the difference when it comes on styling a document. For obvious reasons, react-pdf cannot ship a wide amount of them. Here's a list of available font families that are supported out of the box:\n\n- `Courier`\n- `Courier-Bold`\n- `Courier-Oblique`\n- `Courier-BoldOblique`\n- `Helvetica`\n- `Helvetica-Bold`\n- `Helvetica-Oblique`\n- `Helvetica-BoldOblique`\n- `Times-Roman`\n- `Times-Bold`\n- `Times-Italic`\n- `Times-BoldItalic`\n\nIn case you want to use a different font, you may load additional font files from many different sources via the `register` method very easily.\n\n```\nimport { Font } from '@react-pdf/renderer'\n\nFont.register({ family: 'FamilyName', src: source, fontStyle: 'normal', fontWeight: 'normal', fonts?: [] });\n```\n\n#### source\n\nSpecifies the source of the font. This can either be a valid URL, or an absolute path if you're using react-pdf on Node.\n\n#### family\n\nName to which the font will be referenced on styles definition. Can be any unique valid string\n\n#### fontStyle\n\nSpecifies to which font style the registered font refers to.\n\n| Value   | Description                                                                                                                                             |\n| ------- | :------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| normal  | Selects a font that is classified as normal _Default_                                                                                                   |\n| italic  | Selects a font that is classified as italic. If no italic version of the font is registered, react-pdf will fail when a style of this type is present   |\n| oblique | Selects a font that is classified as oblique. If no oblique version of the font is registered, react-pdf will fail when a style of this type is present |\n\n#### fontWeight\n\nSpecifies the registered font weight.\n\n| Value      | Description                          |\n| ---------- | :----------------------------------- |\n| thin       | Equals to value 100                  |\n| ultralight | Equals to value 200                  |\n| light      | Equals to value 300                  |\n| normal     | Equals to value 400 _Default_        |\n| medium     | Equals to value 500                  |\n| semibold   | Equals to value 600                  |\n| bold       | Equals to value 700                  |\n| ultrabold  | Equals to value 800                  |\n| heavy      | Equals to value 900                  |\n| _number_   | Any integer value between 0 and 1000 |\n\nWhen the exact font weight is not registered for a given text, react-pdf will fallback to the nearest registered weight in the same way browsers do. More information [here](https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight#Fallback_weights)\n\n<GoToExample name=\"font-register\" />\n\n#### fonts\n\nIn many cases you will end up registering multiple sources for the same font family (each with different font-style and font-weight for instance). As an alternative of calling `Font.register` for each of this, you can use the `fonts` attribute to register them all at once:\n\n```\nFont.register({ family: 'Roboto', fonts: [\n { src: source1 }, // font-style: normal, font-weight: normal\n { src: source2, fontStyle: 'italic' },\n { src: source3, fontStyle: 'italic', fontWeight: 700 },\n]});\n```\n\n---\n\n### `registerHyphenationCallback`\n\nEnables you to have fine-grained control over how words break, passing your own callback and handle all that logic for yourself:\n\n```\nimport { Font } from '@react-pdf/renderer'\n\nconst hyphenationCallback = (word) => {\n  // Return word parts in an array\n}\n\nFont.registerHyphenationCallback(hyphenationCallback);\n```\n\n<GoToExample name=\"hyphenation-callback\" />\n\n#### Disabling hyphenation\n\nYou can easily disable word hyphenation by just returning the same word as it is passed to the hyphenation callback\n\n```\nFont.registerHyphenationCallback(word => [word]);\n```\n\n<GoToExample name=\"disable-hyphenation\" />\n\n---\n\n### `registerEmojiSource`\n\nPDF documents do not support color emoji fonts. This is a bummer for the ones out there who love their expressiveness and simplicity. The only way of rendering this glyphs on a PDF document, is by embedding them as images.\n\nReact-pdf makes this task simple by enabling you to use a CDN from where to download emoji images. All you have to do is setup a valid URL (we recommend using [Twemoji](https://github.com/twitter/twemoji) for this task), and react-pdf will take care of the rest:\n\n```\nimport { Font } from '@react-pdf/renderer'\n\nFont.registerEmojiSource({\n  format: 'png',\n  url: 'https://cdnjs.cloudflare.com/ajax/libs/twemoji/14.0.2/72x72/',\n});\n```\n\n> **Protip:** react-pdf will need a internet connection to download emoji's images at render time, so bare that in mind when choosing to use this API\n\n<GoToExample name=\"emoji\" />\n\n<NavigationButtons\n  backSrc=\"/styling\"\n  backText=\"Styling\"\n  nextSrc=\"/node\"\n  nextText=\"Node API\"\n/>\n"
  },
  {
    "path": "docs/form.md",
    "content": "import EditButton from '../src/components/Docs/EditButton'\nimport GoToExample from '../src/components/Docs/GoToExample'\nimport NavigationButtons from '../src/components/Docs/NavigationButtons'\n\n<EditButton to=\"https://github.com/react-pdf/site/blob/master/docs/form.md\" />\n\n## Forms\n\nReact-pdf includes the ability to use [AcroForm](https://experienceleague.adobe.com/en/docs/experience-manager-learn/forms/document-services/pdf-forms-and-documents#acroforms)-Forms in pdfs. AcroForm is part of interactive pdfs and includes annotations for e.g. text fields, checkboxes. The AcroForm is automatically initialized as soon as one of the form elements is used. \n\n### TextInput\n\nThe `<TextInput />` element represents a text field for inputting single- or multiline text. \n\n#### Valid props\n\n| Prop name |                            Description                             |                                        Type |     Default |\n| --------- | :----------------------------------------------------------------: | ------------------------------------------: | ----------: |\n| align     |                   Defines the alignment of text                    |                                    _String_ |      _left_ |\n| multiline | Defines if the user is allowed to input more than one line of text |                                   _Boolean_ |     _false_ |\n| password  |        If set to true the text will be masked with e. g. *         |                                   _Boolean_ |     _false_ |\n| noSpell   |   If set to true tells the pdf viewer to not spellcheck the text   |                                   _Boolean_ |     _false_ |\n| format    |      Defines the format the textinput should be formatted to       | [TextInputFormatting](#textinputformatting) | _undefined_ |\n| fontSize  | Defines the font size for the text input. Set to `0` for auto-size |                                   _Number_ | _undefined_ |\n| maxLength |              Defines the maximum number of characters               |                                   _Number_ | _undefined_ |\n\nSee also [Common Form Attributes](#common-form-attributes)\n\n<GoToExample name=\"textinput\" />\n\n##### TextInputFormatting\n\n`format` is a definition how the value shall be formatted by the viewer. Take into account that not all viewers support this feature because it involves javascript execution.\n\n| Prop name       |                     Description                      |                                        Type |     Default |\n| --------------- | :--------------------------------------------------: | ------------------------------------------: | ----------: |\n| type            |            Defines the alignment of text             | [TextInputFormatType](#textinputformattype) | _undefined_ |\n| param           |          Defines a format for certain types          |                                    _String_ | _undefined_ |\n| nDec            | Defines the number of places after the decimal point |                                    _Number_ | _undefined_ |\n| sepComma        |   Defines if the seperator shall be a comma or not   |                                   _Boolean_ |     _false_ |\n| negStyle        |         Defines  style for negative numbers          |                                    _String_ | _undefined_ |\n| currency        |   Defines the symbol to be placed as currency sign   |                                    _String_ | _undefined_ |\n| currencyPrepend |    If set to true the currency sign is prepended     |                                   _Boolean_ |     _false_ |\n\n##### TextInputFormatType\n\n`type` prop can take one of the following values.\n\n| Value    |                             Description                             |\n| -------- | :-----------------------------------------------------------------: |\n| date     |          Expects the param prop to be a valid date format.          |\n| time     |          Expects the param prop to be a valid time format.          |\n| percent  | Uses the props nDec, sepComma, negStyle, currency, currencyPrepend. |\n| number   | Uses the props nDec, sepComma, negStyle, currency, currencyPrepend. |\n| zip      |                  Formats for the zip-code standard                  |\n| zipPlus4 |                   Formats for the zip+4 standard                    |\n| phone    |                     Formats for a phone number                      |\n| ssn      |                      Formats for a ssn number                       |\n\nFor deeper knowledge into the formatting you might want to look into the [pdfkit doc](https://pdfkit.org/docs/forms.html#text_field_formatting) and into the [API Reference for Forms](https://experienceleague.adobe.com/docs/experience-manager-learn/assets/FormsAPIReference.pdf) Page 119.\n\n---\n\n### Checkbox\n\nThe `<Checkbox />` element represents one of two states the user can toggle between. Some viewers behave differently based on wether the `name` prop is set or not and wether there are name duplicates or not. This can result in inconsistencies which makes the `name` prop recommendable to use and to achieve a consistent result across various viewers.\n\n#### Valid props\n\n| Prop name       |                                 Description                                  |      Type |     Default |\n| --------------- | :--------------------------------------------------------------------------: | --------: | ----------: |\n| backGroundColor |       It defines the color of the inside of the checkbox it applies to       |  _String_ | _undefined_ |\n| borderColor     |         Defines the color used to paint the outline of the checkbox          |  _String_ | _undefined_ |\n| checked         |                    If set to true the checkbox is checked                    | _Boolean_ |     _false_ |\n| onState         |        If set to true tells the pdf viewer to not spellcheck the text        |  _String_ |       _Yes_ |\n| offState        |           Defines the format the textinput should be formatted to            |  _String_ |        _No_ |\n| xMark           | If set to true the onState appears as a X otherwise a checkmark is displayed | _Boolean_ |     _false_ |\n\nSee also [Common Form Attributes](#common-form-attributes)\n\n<GoToExample name=\"checkbox\" />\n\n---\n\n### Select\n\nThe `<Select />` element represents a dropdown menu for the selection of predefined options.\n\n#### Valid props\n\n| Prop name |                                        Description                                        |      Type | Default |\n| --------- | :---------------------------------------------------------------------------------------: | --------: | ------: |\n| edit      |               If set to true allows the user to enter a value in the field                | _Boolean_ | _false_ |\n| noSpell   | If set to true and edit is set to true it tells the pdf viewer to not spellcheck the text | _Boolean_ | _false_ |\n\nFor more attributes head to [Select and List Attributes](#select-and-list-attributes).\n\n<GoToExample name=\"picker-formlist\" />\n\n---\n\n### List\n\nThe `<List />` element represents a scrollable list for the selection of predefined options.\n\n#### Valid props\n\nFor attributes head to [Select and List Attributes](#select-and-list-attributes).\n\n<GoToExample name=\"picker-formlist\" />\n\n---\n\n### Select and List Attributes\n\nThese attributes are shared by the Select and List elements.\n\n#### Valid props\n\n| Prop name   |                          Description                          |       Type | Default |\n| ----------- | :-----------------------------------------------------------: | ---------: | ------: |\n| sort        |     Defines if the options shall be sorted alphabetically     |  _Boolean_ | _false_ |\n| multiSelect | If set to true the user is allowed to select multiple options |  _Boolean_ | _false_ |\n| select      |   Defines the options to show inside the field as an array    | _String[]_ |    _[]_ |\n\nSee also [Common Form Attributes](#common-form-attributes)\n\n---\n\n### FieldSet\n\nThe `<FieldSet />` element is used to group other form elements together. On the form level this creates a hierarchical structure most important for data extraction and naming clearance. It is fully invisible. The usage of this element is optional and not required by any other element. Because of not being an element on its own the FieldSet is the only element not sharing the common form attributes.\n\n#### Valid props\n\n| Prop name |        Description         |     Type |     Default |\n| --------- | :------------------------: | -------: | ----------: |\n| name      | The name of the FieldSet   | _String_ | _undefined_ |\n\n<GoToExample name=\"formfield\" />\n\n---\n\n### Common Form Attributes\n\nCommon form attributes are attributes that are shared by a variety of elements. \n\n#### Supported attributes\n\n| Prop name    |                                              Description                                               |               Type |     Default |\n| ------------ | :----------------------------------------------------------------------------------------------------: | -----------------: | ----------: |\n| name         |                  Describes the name of the specific element when submitting the form                   |           _String_ |     _empty_ |\n| required     |            Describes if the specific element needs to have a value when submitting the form            |          _Boolean_ |     _false_ |\n| noExport     |                If set to true the specific element is not exported at a form submission                |          _Boolean_ |     _false_ |\n| readOnly     | Defines if the specific element is editable or not. If set to true, the user shall not edit the value. |          _Boolean_ |     _false_ |\n| value        |        Defines the value of the specific element. For further information look at the element.         | _String_, _Number_ | _undefined_ |\n| defaultValue |        Describes what the default state for the value is. Can be used when resetting the form.         | _String_, _Number_ | _undefined_ |\n\n<NavigationButtons\n  backSrc=\"/svg\"\n  backText=\"SVG Images\"\n  nextSrc=\"/hooks\"\n  nextText=\"Hooks\"\n/>"
  },
  {
    "path": "docs/hooks.md",
    "content": "import EditButton from '../src/components/Docs/EditButton'\nimport NavigationButtons from '../src/components/Docs/NavigationButtons'\n\n<EditButton to=\"https://github.com/react-pdf/site/blob/master/docs/hooks.md\" />\n\n## Hooks\n\n### usePDF `Web only`\n\nReact-pdf now ships a hook called `usePDF` that enables accessing all PDF creation capabilities via a React hook API. This is great if you need more control over how the document gets rendered or how often it's updated.\n\n#### Usage\n\n```js\nconst [instance, update] = usePDF({ document });\n```\n\n#### Parameters\n\n| Prop name |       Description       | Default     |\n| --------- | :---------------------: | ----------- |\n| document  | Document's root element | _undefined_ |\n\n#### Instance object\n\n| Prop name |                         Description                         | Default     |\n| --------- | :---------------------------------------------------------: | ----------- |\n| url       |   Rendered document blog url. Null if loading or errored    | _undefined_ |\n| blob      | Rendered document blob instance. Null if loading or errored | _undefined_ |\n| loading   |   Loading state. It's true if current render is in place    | _false_     |\n| error     |              Error message if rendering failed              | _undefined_ |\n\n#### Update function\n\nUsed to trigger a document re-render. By default, changing the document instance does not triggers a new PDF file creation. This is especially helpful when rendering a download button or something similar, where you might want to render the document right before the action gets triggered.\n\nThe update function takes the new document and does not return anything.\n\n> For more information about how this hook is used please refer to the [Using the usePDF hook](/advanced#using-the-usepdf-hook) section\n\n---\n\n<NavigationButtons\n  backSrc=\"/form\"\n  backText=\"Forms\"\n  nextSrc=\"/styling\"\n  nextText=\"Styling\"\n/>\n"
  },
  {
    "path": "docs/hyphenation.md",
    "content": "import GoToExample from '../src/components/Docs/GoToExample'\n\n### Hyphenation\n\nHyphenation refers to the automated process of breaking words between lines to create a better visual consistency across a text block. This is a complex problem. It involves knowing about the language of the text, available space, ligatures, among other things.\n\nReact-pdf internally implements the [Knuth and Plass line breaking algorithm](http://www.eprg.org/G53DOC/pdfs/knuth-plass-breaking.pdf) that produces the minimum amount of lines without compromising text legibility. By default it's setup to hyphenate english words.\n\nIf you need more fine-grained control over how words break, you can pass your own callback and handle all that logic by yourself:\n\n```\nimport { Font } from '@react-pdf/renderer'\n\nconst hyphenationCallback = (word) => {\n  // Return word syllables in an array\n}\n\nFont.registerHyphenationCallback(hyphenationCallback);\n```\n\nYou can use the [default hyphenation callback](https://github.com/diegomura/react-pdf/blob/master/packages/textkit/src/engines/wordHyphenation/index.ts) as a starting point.\n\nExample of a custom implementation (German):\n```\nimport { Font } from \"@react-pdf/renderer\";\nimport { hyphenateSync as hyphenateDE } from \"hyphen/de\";\n\nconst hyphenationCallback = (word) => {\n  return hyphenateDE(word).split(\"\\u00AD\");\n};\n\nFont.registerHyphenationCallback(hyphenationCallback);\n```\n\n> **Protip:** If you don't want to hyphenate words at all, just provide a callback that returns the same words it receives. More information [here](/fonts#registerhyphenationcallback)\n\n<GoToExample name=\"hyphenation-callback\" />\n"
  },
  {
    "path": "docs/math.md",
    "content": "import GoToExample from '../src/components/Docs/GoToExample'\n\n### Math expressions\n\nReact-pdf supports rendering LaTeX mathematical expressions via the `@react-pdf/math` package. It converts LaTeX notation into vector graphics (SVG paths), so all glyphs are fully embedded in the PDF without external fonts or assets.\n\n#### Installation\n\n```bash\nnpm install @react-pdf/math\n```\n\n#### Usage\n\n```jsx\nimport { Document, Page, Text, View } from '@react-pdf/renderer';\nimport { Math } from '@react-pdf/math';\n\nconst MyDocument = () => (\n  <Document>\n    <Page size=\"A4\" style={{ padding: 40 }}>\n      <Math>{\"x = \\\\frac{-b \\\\pm \\\\sqrt{b^2 - 4ac}}{2a}\"}</Math>\n    </Page>\n  </Document>\n);\n```\n\n#### Inline mode\n\nBy default, expressions render in display mode (centered, larger). Set `inline` to render compact equations suitable for embedding alongside text:\n\n```jsx\n<View style={{ flexDirection: 'row', alignItems: 'center' }}>\n  <Text>The equation </Text>\n  <Math inline height={12}>{\"E = mc^2\"}</Math>\n  <Text> is famous.</Text>\n</View>\n```\n\n<GoToExample name=\"math\" />\n\n#### Valid props\n\n| Prop name |                                 Description                                 |               Type |     Default |\n|-----------|:---------------------------------------------------------------------------:|-------------------:|------------:|\n| children  |                   LaTeX math expression to render                           |           _String_ | _undefined_ |\n| inline    | Inline mode (compact) vs display mode (centered, larger)                    |          _Boolean_ |     _false_ |\n| width     | Width of the rendered expression. Auto-calculated from aspect ratio if omitted | _Number_, _String_ | _undefined_ |\n| height    | Height of the rendered expression. Defaults to 22 if omitted                | _Number_, _String_ |        _22_ |\n| color     |                   Color of the math expression                              |           _String_ |   _\"black\"_ |\n| debug     | Enables debug mode showing a border around the expression                   |          _Boolean_ |     _false_ |\n\n#### Supported LaTeX features\n\nAll standard LaTeX math features supported by MathJax are available, including:\n\n- Fractions, roots, and arithmetic operators\n- Greek and Hebrew letters\n- Summations, products, and integrals\n- Limits and derivatives\n- Matrices and arrays\n- Binomial coefficients\n- Trigonometric functions\n- Accents and decorations\n- Piecewise functions and aligned equations\n\n---\n"
  },
  {
    "path": "docs/node.md",
    "content": "import EditButton from '../src/components/Docs/EditButton'\nimport NavigationButtons from '../src/components/Docs/NavigationButtons'\n\n<EditButton to=\"https://github.com/react-pdf/site/blob/master/docs/node.md\" />\n\n## Node API\n\n### renderToFile\n\nHelper function to render a PDF into a file.\n\n#### Usage\n\n```js\nconst MyDocument = () => (\n  <Document>\n    <Page>\n      <Text>React-pdf</Text>\n    </Page>\n  </Document>\n);\n\nawait renderToFile(<MyDocument />, `${__dirname}/my-doc.pdf`);\n```\n\n#### Arguments\n\n| Prop name |                     Description                     | Default     |\n| --------- | :-------------------------------------------------: | ----------- |\n| document  |       Document's root element to be rendered        | _undefined_ |\n| path      | File system path where the document will be created | _undefined_ |\n| callback  |  Function to be called after rendering is finished   | _undefined_ |\n\n### renderToString\n\nHelper function to render a PDF into a string.\n\n#### Usage\n\n```js\nconst MyDocument = () => (\n  <Document>\n    <Page>\n      <Text>React-pdf</Text>\n    </Page>\n  </Document>\n);\n\nconst value = await renderToString(<MyDocument />);\n```\n\n#### Arguments\n\n| Prop name |              Description               | Default     |\n| --------- | :------------------------------------: | ----------- |\n| document  | Document's root element to be rendered | _undefined_ |\n\n#### Returns\n\nString representation of PDF document\n\n### renderToBuffer\n\nHelper function to render a PDF into a Node Buffer.\n\n#### Usage\n\n```js\nconst MyDocument = () => (\n  <Document>\n    <Page>\n      <Text>React-pdf</Text>\n    </Page>\n  </Document>\n);\n\nconst buffer = await renderToBuffer(<MyDocument />);\n```\n\n#### Arguments\n\n| Prop name |              Description               | Default     |\n| --------- | :------------------------------------: | ----------- |\n| document  | Document's root element to be rendered | _undefined_ |\n\n#### Returns\n\nBuffer representation of PDF document\n\n### renderToStream\n\nHelper function to render a PDF into a Node Stream.\n\n#### Usage\n\n```js\nconst MyDocument = () => (\n  <Document>\n    <Page>\n      <Text>React-pdf</Text>\n    </Page>\n  </Document>\n);\n\nconst stream = await renderToStream(<MyDocument />);\n```\n\n#### Arguments\n\n| Prop name |              Description               | Default     |\n| --------- | :------------------------------------: | ----------- |\n| document  | Document's root element to be rendered | _undefined_ |\n\n#### Returns\n\nPDF document Stream\n\n<NavigationButtons\n  backSrc=\"/fonts\"\n  backText=\"Fonts\"\n  nextSrc=\"/advanced\"\n  nextText=\"Advanced\"\n/>\n"
  },
  {
    "path": "docs/on-the-fly.md",
    "content": "### On the fly rendering `Web only`\n\nThere are some cases in which you may need to generate a document without showing it on screen. For those scenarios, react-pdf provides three different solutions:\n\n#### Download link\n\nIs it possible that what you need is just a \"Download\" button. If that's the case, you can use `<PDFDownloadLink />` to easily create and download your document.\n\n```jsx\nimport { PDFDownloadLink, Document, Page } from '@react-pdf/renderer';\n\nconst MyDoc = () => (\n  <Document>\n    <Page>\n      // My document data\n    </Page>\n  </Document>\n);\n\nconst App = () => (\n  <div>\n    <PDFDownloadLink document={<MyDoc />} fileName=\"somename.pdf\">\n      {({ blob, url, loading, error }) =>\n        loading ? 'Loading document...' : 'Download now!'\n      }\n    </PDFDownloadLink>\n  </div>\n);\n```\n\n> **Protip:** You still have access to blob's data if you need it.\n\n#### Access blob data\n\nHowever, react-pdf does not stick to just download the document but also enables direct access to the document's blob data for any other possible use case. All you have to do is make use of `<BlobProvider />`.\n\n```jsx\nimport { BlobProvider, Document, Page } from '@react-pdf/renderer';\n\nconst MyDoc = (\n  <Document>\n    <Page>\n      // My document data\n    </Page>\n  </Document>\n);\n\nconst App = () => (\n  <div>\n    <BlobProvider document={MyDoc}>\n      {({ blob, url, loading, error }) => {\n        // Do whatever you need with blob here\n        return <div>There's something going on on the fly</div>;\n      }}\n    </BlobProvider>\n  </div>\n);\n```\n\nYou can also obtain the blob data imperatively, which may be useful if you are using react-pdf on a non-React frontend (web only).\n\n```jsx\nimport { pdf, Document, Page } from '@react-pdf/renderer';\n\nconst MyDoc = (\n  <Document>\n    <Page>\n      // My document data\n    </Page>\n  </Document>\n);\n\nconst blob = pdf(MyDoc).toBlob();\n```\n\n#### Using the usePDF hook\n\nReact-pdf now ships a hook API that will give you direct access to the document data (such as blob or url state) as well as with an _update_ function to trigger document re-rendering. Since document re-computation can be an expensive operation, this hook is perfect solution for those cases in where you need a fine control over when this happens.\n\n```js\nimport { usePDF, Document, Page } from '@react-pdf/renderer';\n\nconst MyDoc = (\n  <Document>\n    <Page>\n      // My document data\n    </Page>\n  </Document>\n);\n\nconst App = () => {\n  const [instance, updateInstance] = usePDF({ document: MyDoc });\n\n  if (instance.loading) return <div>Loading ...</div>;\n\n  if (instance.error) return <div>Something went wrong: {instance.error}</div>;\n\n  return (\n    <a href={instance.url} download=\"test.pdf\">\n      Download\n    </a>\n  );\n}\n```\n\n> **Protip:** You still have access to blob's data inside `instance.blob` if you need it\n\n---\n"
  },
  {
    "path": "docs/orphan-widow-protection.md",
    "content": "import GoToExample from '../src/components/Docs/GoToExample'\n\n### Orphan & widow protection\n\nWhen you layout text, orphans and widows can make the difference between a _good_ document and a _great_ one. That's why react-pdf has a built-in orphan and widow protection that you can use right out of the box.\n\nBut react-pdf does not reserve this protection just for text. You can adjust this protection to your convenience by just setting some props to **any react-pdf primitive**:\n\n| Prop name             |                                                     Description                                                      |      Type | Default |\n| --------------------- | :------------------------------------------------------------------------------------------------------------------: | --------: | ------: |\n| minPresenceAhead      |     Hint that no page wrapping should occur between all sibling elements following the element within _n_ points     | _Integer_ |       0 |\n| orphans _(text only)_ | Specifies the minimum number of lines in a text element that must be shown at the bottom of a page or its container. | _Integer_ |       2 |\n| widows _(text only)_  |  Specifies the minimum number of lines in a text element that must be shown at the top of a page or its container.   | _Integer_ |       2 |\n\n> **Protip:** You can use this API to ensure that headings do not get rendered at the bottom of a page\n\n<GoToExample name=\"orphans-and-widows\" />\n\n---\n"
  },
  {
    "path": "docs/page-wrapping.md",
    "content": "import GoToExample from '../src/components/Docs/GoToExample'\n\n### Page wrapping\n\nSemantically, the `<Page />` component represents a single page in the rendered document. However, there are scenarios in which you would expect to have page breaks whenever the page contents exceed their limits, specially when handling big chunks of text. After all, PDFs are paged documents. React-pdf has a built-in wrapping engine that is enabled by default, so you can start creating paged documents right out of the box. If that's not what you need, you can disable this very easily by doing:\n\n```\nimport { Document, Page } from '@react-pdf/renderer'\n\nconst doc = () => (\n  <Document>\n    <Page wrap={false}>\n      // something pretty here\n    </Page>\n  </Document>\n);\n```\n\n<GoToExample name=\"page-wrap\" />\n\n#### Breakable vs. unbreakable components\n\nWe can identify two different types of components based on how they wrap:\n\n- `Breakable components` try to fill up the remaining space before jumping into a new page. By default, this group is composed by _View_, _Text_ and _Link_ components\n- `Unbreakable components` are indivisible, therefore if there isn't enough space for them they just get rendered in the following page. In this group by default we only find _Image_.\n\n<GoToExample name=\"breakable-unbreakable\" />\n\n#### Disabling component wrapping\n\nReact-pdf also enables you to transform _breakable_ elements into their opposite, forcing them to always render in a new page. This can be done by simply setting the prop `wrap={false}` to any valid component:\n\n```\nimport { Document, Page, View } from '@react-pdf/renderer'\n\nconst doc = () => (\n  <Document>\n    <Page wrap>\n      <View wrap={false}>\n        // fancy things here\n      </View>\n    </Page>\n  </Document>\n);\n```\n\nNow, if the `<View />` component happens to be at the bottom of the page without enough space, it will be rendered in a new page as it would be _unbreakable_.\n\n<GoToExample name=\"disable-wrapping\" />\n\n#### Page breaks\n\nPage breaks are useful for separating concerns inside the document, or ensuring that a certain element will always show up on the top of the page.\n\nAdding page breaks in react-pdf is very simple: all you have to do is add the `break` prop to any primitive. This will force the wrapping algorithm to start a new page when rendering that element.\n\n```\nimport { Document, Page, Text } from '@react-pdf/renderer'\n\nconst doc = () => (\n  <Document>\n    <Page wrap>\n      <Text break>\n        // fancy things here\n      </Text>\n    </Page>\n  </Document>\n);\n```\n\n<GoToExample name=\"page-breaks\" />\n\n#### Fixed components\n\nThere is still another scenario we didn't talk about yet: what if you want to wrap pages but also be able to render a component on _all_ pages? This is where the `fixed` prop comes into play.\n\n```\nimport { Document, Page, View } from '@react-pdf/renderer'\n\nconst doc = () => (\n  <Document>\n    <Page wrap>\n      <View fixed>\n        // fancy things here\n      </View>\n    </Page>\n  </Document>\n);\n```\n\nJust by that, the `<View />` component will be placed repeatedly throughout all pages.\n\n> **Protip:** This feature can be very handy for creating nice headers, footers or page numbers, among other use cases. You can even absolutely position fixed elements on your page to create more complex layouts!\n\n<GoToExample name=\"fixed-components\" />\n\n---\n"
  },
  {
    "path": "docs/quick-start.md",
    "content": "import EditButton from '../src/components/Docs/EditButton'\nimport GoToExample from '../src/components/Docs/GoToExample'\nimport NavigationButtons from '../src/components/Docs/NavigationButtons'\n\n### 1. Install React and react-pdf\n\nStarting with react-pdf is extremely simple.\n\n#### Using npm\n\n```\nnpm install @react-pdf/renderer --save\n```\n\n#### Using Yarn\n\n```\nyarn add @react-pdf/renderer\n```\n\n#### Using pnpm\n\n```\npnpm add @react-pdf/renderer\n```\n\n#### Using Bun\n\n```\nbun add @react-pdf/renderer\n```\n\nSince a renderer simply implements _how elements render into something_, you still need to have React to make it work (and react-dom for client-side document generation). You can find instructions on how to do that [here](https://react.dev/learn/add-react-to-an-existing-project).\n\n### 2. Create your PDF document\n\nThis is where things start getting interesting. React-pdf exports a set of React primitives that enable you to render things into your document very easily. It also has an API for styling them, using CSS properties and Flexbox layout.\n\nLet's make the code speak for itself:\n\n```\nimport React from 'react';\nimport { Page, Text, View, Document, StyleSheet } from '@react-pdf/renderer';\n\n// Create styles\nconst styles = StyleSheet.create({\n  page: {\n    flexDirection: 'row',\n    backgroundColor: '#E4E4E4'\n  },\n  section: {\n    margin: 10,\n    padding: 10,\n    flexGrow: 1\n  }\n});\n\n// Create Document Component\nconst MyDocument = () => (\n  <Document>\n    <Page size=\"A4\" style={styles.page}>\n      <View style={styles.section}>\n        <Text>Section #1</Text>\n      </View>\n      <View style={styles.section}>\n        <Text>Section #2</Text>\n      </View>\n    </Page>\n  </Document>\n);\n```\n\nThis will produce a PDF document with a single page. Inside, two different blocks, each of them rendering a different text. These are not the only valid primitives you can use. Please refer to the Components or Examples sections for more information.\n\n### 3. Choose where to render the document\n\nReact-pdf enables you to render the document in two different environments: **web** and **server**. The process is essentially the same, but catered to needs of each environment.\n\n#### Save in a file\n\n```\nimport ReactPDF from '@react-pdf/renderer';\n\nReactPDF.render(<MyDocument />, `${__dirname}/example.pdf`);\n```\n\n#### Render to a stream\n\n```\nimport ReactPDF from '@react-pdf/renderer';\n\nReactPDF.renderToStream(<MyDocument />);\n```\n\n#### Render in DOM\n\n```\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { PDFViewer } from '@react-pdf/renderer';\n\nconst App = () => (\n  <PDFViewer>\n    <MyDocument />\n  </PDFViewer>\n);\n\nReactDOM.render(<App />, document.getElementById('root'));\n```\n\n### 4. Have fun!\n\nMaybe the most important step — make use of all react-pdf capabilities to create beautiful and awesome documents!\n\n<NavigationButtons\n  nextSrc=\"/compatibility\"\n  nextText=\"Compatibility\"\n/>\n"
  },
  {
    "path": "docs/rendering-process.md",
    "content": "import EditButton from '../src/components/Docs/EditButton'\nimport OverviewTimeline from '../src/components/Docs/OverviewTimeline'\nimport NavigationButtons from '../src/components/Docs/NavigationButtons'\n\n<EditButton to=\"https://github.com/react-pdf/site/blob/master/docs/rendering-process.md\" />\n\n## Rendering process overview\n\nAt a high level, the document creation process is composed by 6 concrete steps.\n\n<OverviewTimeline />\n\n### 1. Internal structures creation\n\nThe first step involves transforming the *React element tree* into the appropriate internal instances for each component type. This involves saving the relationship between these (parent-child) nodes.\n\nBesides **Document**, all nodes will represent a block inside a document, with a height, width, paddings and margins (yet to be discovered).\n\nFrom now on, react-pdf works over this data structure to start inferring where each block goes inside the final document.\n\n### 2. Resolve styles\n\nThis step involves pre-processing node styles, as well as defining default values for the needed properties that were not provided by the user. This way, all successive steps can work on the basis that all required styles are defined in the tree.\n\nPart of the pre-processing involves unit conversion, style inheritance and styles expansion.\n\n### 3. Fetching assets\n\nTime to ask for all needed resources! We traverse the internal nodes tree fetching any required *font*, *image* or *emoji*.\n\nWe run all these requests asynchronously, but we won't move forward until all requests are finished (with success or failure).\n\n### 4. Layout text\n\nNow that we have all fonts loaded, we can layout text into paragraphs. This is a critical and complex step: we first convert characters into glyphs using the appropriate font family and size, embed images or emoji images if present and ultimately break them into lines either on whitespaces or by breaking words based on language (or custom) rules.\n\n### 5. Wrapping pages\n\nThis is the most time-consuming step, since it involves not just calculating where each element is in the document and how much space it will need, but also splitting these elements into different pages.\n\nWe internally use [Yoga layout](https://yogalayout.com/) to compute node's size and coordinates inside the document, and perform page breaking based on a set of customizable heuristics.\n\n### 6. Rendering\n\nThe creation of the PDF document itself. For this task, we use the awesome [pdfkit](https://github.com/devongovett/pdfkit).\n\nOnce in this stage, we have our internal tree structure with all the needed data to generate our document. All it remains is deciding what we want to do with this data. This will vary depending on the binding you are using, but basically it means either displaying or saving it.\n\n<NavigationButtons\n  backSrc=\"/compatibility\"\n  backText=\"Compatibility\"\n  nextSrc=\"/components\"\n  nextText=\"Components\"\n/>\n"
  },
  {
    "path": "docs/styling.md",
    "content": "import List from '../src/components/UI/List'\nimport EditButton from '../src/components/Docs/EditButton'\nimport GoToExample from '../src/components/Docs/GoToExample'\nimport NavigationButtons from '../src/components/Docs/NavigationButtons'\n\n<EditButton to=\"https://github.com/react-pdf/site/blob/master/docs/styling.md\" />\n\n## Styling\n\nBecause a document without styles would be very boring, react-pdf ships a powerful styling solution using CSS and Flexbox.\n\n### StyleSheet API\n\nReact-pdf also sticks with the primitives specs when it comes to styling.\n\n#### StyleSheet.create()\n\nCreate a stylesheet. This method expects a valid JS object as only argument (containing as much css definitions as you want) and returns an object that you can pass down to components via the `style` prop\n\n```\nimport React from 'react';\nimport { Page, Text, View, Document, StyleSheet } from '@react-pdf/renderer';\n\nconst styles = StyleSheet.create({\n  page: { backgroundColor: 'tomato' },\n  section: { color: 'white', textAlign: 'center', margin: 30 }\n});\n\nconst doc = (\n  <Document>\n    <Page size=\"A4\" style={styles.page}>\n      <View style={styles.section}>\n        <Text>Section #1</Text>\n      </View>\n    </Page>\n  </Document>\n);\n\nReactPDF.render(doc);\n```\n\n<GoToExample name=\"styles\" />\n\n#### Inline styling\n\nThere's no need to call `StyleSheet.create` in order to style components. You can also just pass a plain JS object to the `style` prop and react-pdf will get the job done.\n\n```\nimport React from 'react';\nimport { Page, Text, View, Document } from '@react-pdf/renderer';\n\nconst MyDocument = () => (\n  <Document>\n    <Page size=\"A4\" style={{ backgroundColor: 'tomato' }}>\n      <View style={{ color: 'white', textAlign: 'center', margin: 30 }}>\n        <Text>Section #1</Text>\n      </View>\n    </Page>\n  </Document>\n);\n```\n\n<GoToExample name=\"inline-styles\" />\n\n#### Mixing both solutions\n\nThe `style` prop also accepts an Array as value, containing any possible combination of the last two alternatives\n\n```\nimport React from 'react';\nimport { Page, Text, View, Document, StyleSheet } from '@react-pdf/renderer';\n\nconst styles = StyleSheet.create({\n  page: { backgroundColor: 'tomato' },\n  section: { textAlign: 'center', margin: 30 }\n});\n\nconst MyDocument = () => (\n  <Document>\n    <Page size=\"A4\" style={styles.page}>\n      <View style={[styles.section, { color: 'white' }]}>\n        <Text>Section #1</Text>\n      </View>\n    </Page>\n  </Document>\n);\n```\n\n> **Protip:** This can be useful when you want to apply both predefined styles, and styles based on props\n\n<GoToExample name=\"mixed-styles\" />\n\n---\n\n### Media queries\n\nThere may be times in which you'll need to apply different styles based on the document context. For that, we provide media-queries support (just as you would do it for the web!). You can query based on both `width` and `height` (min and max), and also `orientation`:\n\n```\nimport React from 'react';\nimport { Page, Text, View, Document, StyleSheet } from '@react-pdf/renderer';\n\nconst styles = StyleSheet.create({\n  section: {\n    width: 200,\n    '@media max-width: 400': {\n      width: 300,\n    },\n    '@media orientation: landscape': {\n      width: 400,\n    },\n  }\n});\n\nconst MyDocument = () => (\n  <Document>\n    <Page size=\"A4\" style={styles.page}>\n      <View style={styles.section}>\n        <Text>Section #1</Text>\n      </View>\n    </Page>\n  </Document>\n);\n```\n\n<GoToExample name=\"media-queries\" />\n\n---\n\n### Valid units\n\n`pt` _(default. Based on the standard 72 dpi PDF document)_\n\n`in` inches\n\n`mm` millimeters\n\n`cm` centimeters\n\n`%` percentage\n\n`vw` viewport/page width\n\n`vh` viewport/page height\n\n---\n\n### Valid CSS properties\n\n#### Flexbox\n\n- alignContent\n- alignItems\n- alignSelf\n- flex\n- flexDirection\n- flexWrap\n- flexFlow\n- flexGrow\n- flexShrink\n- flexBasis\n- justifyContent\n- gap\n- rowGap\n- columnGap\n\n#### Layout\n\n- aspectRatio\n- bottom\n- display\n- left\n- position _(relative, absolute, static)_\n- right\n- top\n- overflow\n- zIndex\n\n#### Dimension\n\n- height\n- maxHeight\n- maxWidth\n- minHeight\n- minWidth\n- width\n\n#### Color\n\n- backgroundColor\n- color\n- opacity\n\n#### Text\n\n- direction _(ltr, rtl)_\n- fontSize\n- fontFamily\n- fontStyle\n- fontWeight\n- letterSpacing\n- lineHeight\n- maxLines\n- textAlign\n- textDecoration\n- textDecorationColor\n- textDecorationStyle\n- textIndent\n- textOverflow\n- textTransform\n- verticalAlign _(sub, super)_\n\n#### Sizing/positioning\n\n- object-fit\n- object-position\n\n#### Margin/padding\n\n- margin\n- marginHorizontal\n- marginVertical\n- marginTop\n- marginRight\n- marginBottom\n- marginLeft\n- padding\n- paddingHorizontal\n- paddingVertical\n- paddingTop\n- paddingRight\n- paddingBottom\n- paddingLeft\n\n#### Transformations\n\n- transform:rotate\n- transform:scale\n- transform:scaleX\n- transform:scaleY\n- transform:translate\n- transform:translateX\n- transform:translateY\n- transform:skew\n- transform:skewX\n- transform:skewY\n- transform:matrix\n- transformOrigin\n\n#### Borders\n\n- border\n- borderColor\n- borderStyle\n- borderWidth\n- borderTop\n- borderTopColor\n- borderTopStyle\n- borderTopWidth\n- borderRight\n- borderRightColor\n- borderRightStyle\n- borderRightWidth\n- borderBottom\n- borderBottomColor\n- borderBottomStyle\n- borderBottomWidth\n- borderLeft\n- borderLeftColor\n- borderLeftStyle\n- borderLeftWidth\n- borderTopLeftRadius\n- borderTopRightRadius\n- borderBottomRightRadius\n- borderBottomLeftRadius\n\n<NavigationButtons\n  backSrc=\"/hooks\"\n  backText=\"Hooks\"\n  nextSrc=\"/fonts\"\n  nextText=\"Fonts\"\n/>\n"
  },
  {
    "path": "docs/svg.md",
    "content": "import EditButton from '../src/components/Docs/EditButton'\nimport GoToExample from '../src/components/Docs/GoToExample'\nimport NavigationButtons from '../src/components/Docs/NavigationButtons'\n\n<EditButton to=\"https://github.com/react-pdf/site/blob/master/docs/svg.md\" />\n\n## SVG Images\n\n### Svg\n\nThe `<Svg />` element is a container that defines a new coordinate system and viewport. It is used as the outermost element of SVG documents.\n\n#### Valid props\n\n| Prop name           |                                                                                    Description                                                                                     |               Type |     Default |\n| ------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | -----------------: | ----------: |\n| width               |                                                                  The displayed width of the rectangular viewport                                                                   | _String_, _Number_ | _undefined_ |\n| height              |                                                                  The displayed height of the rectangular viewport                                                                  | _String_, _Number_ | _undefined_ |\n| viewBox             |                                                             The SVG viewport coordinates for the current SVG fragment                                                              |           _String_ | _undefined_ |\n| preserveAspectRatio | How the svg fragment must be deformed if it is displayed with a different aspect ratio. [See more](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/preserveAspectRatio) |           _String_ | _undefined_ |\n| style               |                                                                      Defines SVG styles. [See more](/styling)                                                                      |  _Object_, _Array_ | _undefined_ |\n\n<GoToExample name=\"svg\" />\n\n---\n\n### Line\n\nThe `<Line />` element is used to create a line.\n\n#### Valid props\n\n| Prop name |                        Description                        |               Type |     Default |\n| --------- | :-------------------------------------------------------: | -----------------: | ----------: |\n| x1        | Defines the x-axis coordinate of the line starting point. | _String_, _Number_ | _undefined_ |\n| x2        |  Defines the x-axis coordinate of the line ending point.  | _String_, _Number_ | _undefined_ |\n| y1        | Defines the y-axis coordinate of the line starting point. | _String_, _Number_ | _undefined_ |\n| y2        |  Defines the y-axis coordinate of the line ending point.  | _String_, _Number_ | _undefined_ |\n\nSee also [Presentation Attributes](#presentation-attributes)\n\n<GoToExample name=\"line\" />\n\n---\n\n### Polyline\n\nThe `<Polyline />` element is used to create any shape that consists of only straight lines (that is connected at several points).\n\n#### Valid props\n\n| Prop name |                                                 Description                                                 |     Type |     Default |\n| --------- | :---------------------------------------------------------------------------------------------------------: | -------: | ----------: |\n| points    | This attribute defines the list of points (pairs of x,y absolute coordinates) required to draw the polyline | _String_ | _undefined_ |\n\nSee also [Presentation Attributes](#presentation-attributes)\n\n<GoToExample name=\"polyline\" />\n\n---\n\n### Polygon\n\nThe `<Polygon />` element is used to create a graphic that contains at least three sides.\n\nPolygons are made of straight lines, and the shape is \"closed\" (all the lines connect up).\n\n#### Valid props\n\n| Prop name |                                                Description                                                 |     Type |     Default |\n| --------- | :--------------------------------------------------------------------------------------------------------: | -------: | ----------: |\n| points    | This attribute defines the list of points (pairs of x,y absolute coordinates) required to draw the polygon | _String_ | _undefined_ |\n\nSee also [Presentation Attributes](#presentation-attributes)\n\n<GoToExample name=\"polygon\" />\n\n---\n\n### Path\n\nThe `<Path />` element is the most powerful element in the SVG library of basic shapes. It can be used to create lines, curves, arcs, and more.\n\n#### Valid props\n\n| Prop name |                                                      Description                                                       |     Type |     Default |\n| --------- | :--------------------------------------------------------------------------------------------------------------------: | -------: | ----------: |\n| d         | This attribute defines the shape of the path. [See more](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/d) | _String_ | _undefined_ |\n\nSee also [Presentation Attributes](#presentation-attributes)\n\n<GoToExample name=\"path\" />\n\n---\n\n### Rect\n\nThe `<Rect />` element is used to create a rectangle and variations of a rectangle shape.\n\n#### Valid props\n\n| Prop name |                Description                |               Type |     Default |\n| --------- | :---------------------------------------: | -----------------: | ----------: |\n| x         |       The x coordinate of the rect.       | _String_, _Number_ | _undefined_ |\n| y         |       The y coordinate of the rect.       | _String_, _Number_ | _undefined_ |\n| width     |          The width of the rect.           | _String_, _Number_ | _undefined_ |\n| height    |          The height of the rect.          | _String_, _Number_ | _undefined_ |\n| rx        | The horizontal corner radius of the rect. | _String_, _Number_ | _undefined_ |\n| ry        |  The vertical corner radius of the rect.  | _String_, _Number_ | _undefined_ |\n\nSee also [Presentation Attributes](#presentation-attributes)\n\n<GoToExample name=\"rect\" />\n\n---\n\n### Circle\n\nThe `<Circle />` element is used to create a circle.\n\n#### Valid props\n\n| Prop name |                    Description                     |               Type |     Default |\n| --------- | :------------------------------------------------: | -----------------: | ----------: |\n| cx        | The x-axis coordinate of the center of the circle. | _String_, _Number_ | _undefined_ |\n| cy        | The y-axis coordinate of the center of the circle. | _String_, _Number_ | _undefined_ |\n| r         |             The radius of the circle.              | _String_, _Number_ | _undefined_ |\n\nSee also [Presentation Attributes](#presentation-attributes)\n\n<GoToExample name=\"circle\" />\n\n---\n\n### Ellipse\n\nThe `<Ellipse />` element is used to create an ellipse.\n\nAn ellipse is closely related to a circle. The difference is that an ellipse has an x and a y radius that differs from each other, while a circle has equal x and y radius.\n\n#### Valid props\n\n| Prop name |               Description                |               Type |     Default |\n| --------- | :--------------------------------------: | -----------------: | ----------: |\n| cx        |      The x position of the ellipse.      | _String_, _Number_ | _undefined_ |\n| cy        |      The y position of the ellipse.      | _String_, _Number_ | _undefined_ |\n| rx        | The radius of the ellipse on the x axis. | _String_, _Number_ | _undefined_ |\n| ry        | The radius of the ellipse on the y axis. | _String_, _Number_ | _undefined_ |\n\nSee also [Presentation Attributes](#presentation-attributes)\n\n<GoToExample name=\"ellipse\" />\n\n---\n\n### Text\n\nThe `<Text />` element draws a graphics element consisting of text.\n\n#### Valid props\n\n| Prop name |                         Description                          |               Type |     Default |\n| --------- | :----------------------------------------------------------: | -----------------: | ----------: |\n| x         | The x coordinate of the starting point of the text baseline. | _String_, _Number_ | _undefined_ |\n| y         | The y coordinate of the starting point of the text baseline. | _String_, _Number_ | _undefined_ |\n\nSee also [Presentation Attributes](#presentation-attributes)\n\n<GoToExample name=\"svgtext\" />\n\n---\n\n### Tspan\n\nThe SVG `<Tspan />` element defines a subtext within a `<Text />` element or another `<Tspan />` element. It allows for adjustment of the style and/or position of that subtext as needed.\n\n#### Valid props\n\n| Prop name |                         Description                          |               Type |     Default |\n| --------- | :----------------------------------------------------------: | -----------------: | ----------: |\n| x         | The x coordinate of the starting point of the text baseline. | _String_, _Number_ | _undefined_ |\n| y         | The y coordinate of the starting point of the text baseline. | _String_, _Number_ | _undefined_ |\n\nSee also [Presentation Attributes](#presentation-attributes)\n\n---\n\n### G\n\nThe `<G />` SVG element is a container used to group other SVG elements.\n\nTransformations applied to the `<G />` element are performed on its child elements, and its attributes are inherited by its children.\n\n#### Valid props\n\nThis element only includes [Presentation Attributes](#presentation-attributes)\n\n<GoToExample name=\"g\" />\n\n---\n\n### Stop\n\nThe SVG `<Stop />` element defines a color and its position to use on a gradient. This element is always a child of a `<LinearGradient />` or `<RadialGradient />` element\n\n#### Valid props\n\n| Prop name   |                                 Description                                 |               Type |     Default |\n| ----------- | :-------------------------------------------------------------------------: | -----------------: | ----------: |\n| offset      |    Defines where the gradient stop is placed along the gradient vector.     | _String_, _Number_ | _undefined_ |\n| stopColor   |  Defines the color of the gradient stop. It can be used as a CSS property.  |           _String_ | _undefined_ |\n| stopOpacity | Defines the opacity of the gradient stop. It can be used as a CSS property. | _String_, _Number_ |         _1_ |\n\n---\n\n### Defs\n\nThe `<Defs />` element is used to store graphical objects that will be used at a later time. Objects created inside a `<Defs />` element are not rendered directly. To display them you have to reference them\n\n---\n\n### ClipPath\n\nThe `<ClipPath />` SVG element defines a clipping path, to be used by the `clipPath` property.\n\nA clipping path restricts the region to which paint can be applied. Conceptually, parts of the drawing that lie outside of the region bounded by the clipping path are not drawn.\n\n<GoToExample name=\"clippath\" />\n\n---\n\n### LinearGradient\n\nThe `<LinearGradient />` element lets authors define linear gradients that can be applied to fill or stroke of graphical elements.\n\n#### Valid props\n\n| Prop name         |                                                   Description                                                   |               Type |     Default |\n| ----------------- | :-------------------------------------------------------------------------------------------------------------: | -----------------: | ----------: |\n| x1                | Defines the x coordinate of the starting point of the vector gradient along which the linear gradient is drawn. | _String_, _Number_ | _undefined_ |\n| x2                |  Defines the x coordinate of the ending point of the vector gradient along which the linear gradient is drawn.  | _String_, _Number_ | _undefined_ |\n| y1                | Defines the y coordinate of the starting point of the vector gradient along which the linear gradient is drawn. | _String_, _Number_ | _undefined_ |\n| y2                |  Defines the y coordinate of the ending point of the vector gradient along which the linear gradient is drawn.  | _String_, _Number_ | _undefined_ |\n| xlinkHref         | Reference to another gradient to inherit its stops and attributes from.                                          |           _String_ | _undefined_ |\n| gradientTransform | Defines a transformation to be applied to the gradient.                                                          |           _String_ | _undefined_ |\n| gradientUnits     | Defines the coordinate system for the gradient attributes. _Valid values: \"userSpaceOnUse\" or \"objectBoundingBox\"_ |           _String_ | _undefined_ |\n\n<GoToExample name=\"lineargradient\" />\n\n---\n\n### RadialGradient\n\nThe `<RadialGradient />` element lets authors define radial gradients that can be applied to fill or stroke of graphical elements.\n\n#### Valid props\n\n| Prop name         |                                                                             Description                                                                             |               Type |     Default |\n| ----------------- | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------: | -----------------: | ----------: |\n| cx                |                                                 Defines the x coordinate of the end circle of the radial gradient.                                                  | _String_, _Number_ | _undefined_ |\n| cy                |                                                 Defines the y coordinate of the end circle of the radial gradient.                                                  | _String_, _Number_ | _undefined_ |\n| r                 |                                                        Defines the radius of the end circle of the radial gradient.                                                 | _String_, _Number_ | _undefined_ |\n| fr                | Defines the radius of the start circle of the radial gradient. The gradient will be drawn such that the 0% `<Stop>` is mapped to the perimeter of the start circle. | _String_, _Number_ | _undefined_ |\n| fx                |                                                Defines the x coordinate of the start circle of the radial gradient.                                                 | _String_, _Number_ | _undefined_ |\n| fy                |                                                Defines the y coordinate of the start circle of the radial gradient.                                                 | _String_, _Number_ | _undefined_ |\n| xlinkHref         | Reference to another gradient to inherit its stops and attributes from.                                                                                              |           _String_ | _undefined_ |\n| gradientTransform | Defines a transformation to be applied to the gradient.                                                                                                              |           _String_ | _undefined_ |\n| gradientUnits     | Defines the coordinate system for the gradient attributes. _Valid values: \"userSpaceOnUse\" or \"objectBoundingBox\"_                                                   |           _String_ | _undefined_ |\n\n<GoToExample name=\"radialgradient\" />\n\n---\n\n### Presentation Attributes\n\nSVG presentation attributes are CSS properties that can be used as attributes on SVG elements. This means it can be passed either inside a `style` object or directly by element's props.\n\n#### Supported attributes\n\n| Prop name        |                                            Description                                             |               Type |     Default |\n| ---------------- | :------------------------------------------------------------------------------------------------: | -----------------: | ----------: |\n| color            |               Provides a potential indirect value for the fill or stroke attributes.               |           _String_ | _undefined_ |\n| dominantBaseline |            Defines the baseline used to align the box’s text and inline-level contents.            |           _String_ |      _auto_ |\n| fill             |             It defines the color of the inside of the graphical element it applies to.             |           _String_ | _undefined_ |\n| fillOpacity      |      It specifies the opacity of the color or the content the current object is filled with.       | _String_, _Number_ |         _1_ |\n| fillRule         |                It indicates how to determine what side of a path is inside a shape.                |           _String_ |   _nonzero_ |\n| opacity          |                 It specifies the transparency of an object or a group of objects.                  | _String_, _Number_ |         _1_ |\n| stroke           |                     Defines the color used to paint the outline of the shape.                      |           _String_ | _undefined_ |\n| strokeWidth      |                    Defines the width of the stroke to be applied to the shape.                     | _String_, _Number_ |         _1_ |\n| strokeOpacity    |                           Defines the opacity of the stroke of a shape.                            | _String_, _Number_ |         _1_ |\n| strokeLinecap    |          Defines the shape to be used at the end of open subpaths when they are stroked.           |           _String_ |      _butt_ |\n| strokeLinejoin   |            Defines the shape to be used at the corners of paths when they are stroked.             |           _String_ |     _miter_ |\n| strokeDasharray  |           Defines the pattern of dashes and gaps used to paint the outline of the shape.           |           _String_ | _undefined_ |\n| transform        | Defines a list of transform definitions that are applied to an element and the element's children. |           _String_ | _undefined_ |\n| textAnchor       |                       Defines the horizontal alignment of a string of text.                        |           _String_ | _undefined_ |\n| visibility       |                       Lets you control the visibility of graphical elements.                       |           _String_ |   _visible_ |\n\n<NavigationButtons\n  backSrc=\"/components\"\n  backText=\"Components\"\n  nextSrc=\"/form\"\n  nextText=\"Forms\"\n/>\n"
  },
  {
    "path": "docs/web-workers.md",
    "content": "### Rendering large documents in the browser\n\nIf you need to render documents with 30 pages or more in the browser, using react-pdf directly in React can occupy the browser's main thread for a long time.\nThis can lead to unresponsive UI and browsers offering the user to abort the script.\nTo avoid this, you should render large documents inside a web worker.\nWeb workers are executed in separate threads, and therefore do not block the main thread of the browser.\nThis way, the UI can stay responsive while the PDF is being rendered.\nFor an example on how to run react-pdf in a web worker, see this [blog post](https://dev.to/simonhessel/creating-pdf-files-without-slowing-down-your-app-a42).\n"
  },
  {
    "path": "env-config.js",
    "content": "require('dotenv').config();\n\nmodule.exports = {\n  'process.env.GA_TOKEN': process.env.GA_TOKEN\n}\n"
  },
  {
    "path": "examples/breakable-unbreakable.txt",
    "content": "const styles = StyleSheet.create({\n  page: { padding: 60 },\n  title: { marginTop: \"90%\" },\n  emphasis: { fontFamily: 'Helvetica-Bold', color: '#F22300' },\n  breakable: { width: '100%', height: 400, backgroundColor: 'tomato' },\n  unbreakable: { width: '100%', height: 400 },\n});\n\nconst doc = (\n  <Document>\n    <Page style={styles.page} size=\"A4\" wrap>\n      <Text style={styles.title}>This is a <Text style={styles.emphasis}>breakable</Text> component. You can see how it wraps to the next page:</Text>\n      <View style={styles.breakable} />\n      <Text style={styles.title}>This is an <Text style={styles.emphasis}>unbreakable</Text> component. Instead of wrapping, it jumps to the next page:</Text>\n      <Image src=\"/images/quijote1.jpg\" />\n    </Page>\n  </Document>\n);\n\nReactPDF.render(doc);\n"
  },
  {
    "path": "examples/checkbox.txt",
    "content": "const Multichoice = () => {\n  const currentYear = new Date().getYear()+1900;\n  return (\n    <View>\n      <Text style={styles.heading}>Questions</Text>\n      <Question answers={['Flask', 'ReactPDF', 'SolidJS', 'Spring Boot']} name=\"technology\">\n        Which technology is used to generate this pdf?\n      </Question>\n      <Question answers={[currentYear+1, currentYear-2, currentYear, currentYear-1]} name=\"year\">\n        What year is it?\n      </Question>\n      <Question answers={['MacOS', 'TempleOS', 'Windows', 'Ubuntu']} name=\"os\">\n        What operating system was developed by Apple?\n      </Question>\n      <Question answers={['Software', 'Construction', 'Hardware', 'Agriculture']} name=\"ram\">\n        Where does RAM get used?\n      </Question>\n      \n      <FreeSpace free={250}/>\n      <FormField style={[styles.inlineFlex, styles.break]} name=\"read\">\n          <Text>I have read all the questions above: </Text>\n          <Checkbox checked required style={styles.checkbox} />\n      </FormField>\n      <FormField style={[styles.inlineFlex, styles.break]} name=\"knowledge\">\n          <Text>I only used my own knowledge to answer the questions: </Text>\n          <Checkbox required style={styles.checkbox} />\n      </FormField>\n    </View>\n  )\n};\n\nconst Question = (props) => (\n  <FormField name={props.name} style={styles.break}>\n    <Text style={[styles.question, styles.break]}>{props.children}</Text>\n  \t<Answers choices={props.answers}/>\n  </FormField>\n)\n\nconst Answers = (props) => (\n  <View style={styles.verticalFlex}>\n    {\n      props.choices.map(choice => (\n        <View style={styles.verticalFlex}>\n          <Text>{choice} </Text>\n          <Checkbox name={choice} style={styles.checkbox} />\n        </View>\n      ))\n    }\n  </View>\n)\n\nconst FreeSpace = (props) => <View style={{marginTop: props.free}}/>\n\nconst styles = StyleSheet.create({\n  page: {\n    padding: 60\n  },\n  checkbox: {\n    height: 20,\n    width: 20\n  },\n  heading: {\n    fontSize: 24,\n    textAlign: 'center',\n    marginBottom: 40\n  },\n  question: {\n    fontSize: 20\n  },\n  break: {\n    marginBottom: 10\n  },\n  verticalFlex: {\n    display: 'flex',\n    flexDirection: 'row',\n    justifyContent: 'space-around'\n  },\n  inlineFlex: {\n    display: 'flex',\n    flexDirection: 'row',\n    justifyContent: 'flex-start'\n  }\n});\n\nconst doc = (\n  <Document>\n    <Page style={styles.page} size=\"A4\">\n      <Multichoice />\n    </Page>\n  </Document>\n);\n\nReactPDF.render(doc);"
  },
  {
    "path": "examples/circle.txt",
    "content": "const styles = StyleSheet.create({\n  page: { padding: 60 },\n});\n\nconst doc = (\n  <Document>\n    <Page style={styles.page} size=\"A4\">\n      <Svg viewBox=\"0 0 100 100\">\n        <Circle\n          cx=\"50\"\n          cy=\"50\"\n          r=\"40\"\n          fill=\"tomato\"\n          stroke=\"gray\"\n        />\n      </Svg>\n    </Page>\n  </Document>\n);\n\nReactPDF.render(doc);\n"
  },
  {
    "path": "examples/clippath.txt",
    "content": "const styles = StyleSheet.create({\n  page: { padding: 60 },\n});\n\nconst doc = (\n  <Document>\n    <Page style={styles.page} size=\"A4\">\n      <Svg viewBox=\"0 0 100 100\">\n        <Defs>\n          <ClipPath id=\"clipPath\">\n            <Rect x=\"15\" y=\"15\" width=\"40\" height=\"40\" />\n          </ClipPath>\n        </Defs>\n\n        <Circle\n          cx=\"25\"\n          cy=\"25\"\n          r=\"20\"\n          fill=\"#0000ff\"\n          clipPath=\"url(#clipPath)\"\n        />\n      </Svg>\n    </Page>\n  </Document>\n);\n\nReactPDF.render(doc);\n"
  },
  {
    "path": "examples/debugging.txt",
    "content": "const styles = StyleSheet.create({\n  container: {\n    height: 300,\n    width: 400,\n    margin: 20,\n    paddingVertical: 20,\n  },\n});\n\nconst MyDocument = () => (\n  <Document>\n    <Page>\n      <View style={styles.container} debug />\n    </Page>\n  </Document>\n);\n\nReactPDF.render(<MyDocument />);\n"
  },
  {
    "path": "examples/disable-hyphenation.txt",
    "content": "Font.registerHyphenationCallback(word => {\n  // Return entire word as unique part\n  return [word];\n});\n\nconst styles = StyleSheet.create({\n  container: {\n    padding: 50\n  },\n  text: {\n    textAlign: 'justify'\n  }\n});\n\nconst MyDocument = () => (\n  <Document>\n    <Page style={styles.container}>\n      <Text style={styles.text}>\n        Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n        Sed vulputate erat id sagittis porta. Phasellus ut diam\n        sit amet mi sagittis faucibus sed in purus. Etiam pretium\n        et lacus sit amet fringilla. Aenean hendrerit volutpat nulla,\n        at facilisis ante bibendum non. Integer ut nulla nulla.\n        Etiam ornare interdum iaculis. Sed lectus nisl, faucibus\n        vitae posuere ut, lobortis in lectus. Donec ac magna in\n        libero tincidunt volutpat. Donec ut varius quam. Duis ornare\n        justo quis sapien bibendum cursus.\n      </Text>\n    </Page>\n  </Document>\n);\n\nReactPDF.render(<MyDocument />);\n"
  },
  {
    "path": "examples/disable-wrapping.txt",
    "content": "const styles = StyleSheet.create({\n  page: { padding: 60 },\n  title: { marginTop: \"90%\" },\n  emphasis: { fontFamily: 'Helvetica-Bold', color: '#F22300' },\n  breakable: { width: '100%', height: 400, backgroundColor: 'tomato' }\n});\n\nconst doc = (\n  <Document>\n    <Page style={styles.page} size=\"A4\" wrap>\n      <Text style={styles.title}>This is a <Text style={styles.emphasis}>breakable</Text> component made <Text style={styles.emphasis}>unbreakable</Text>. Instead of wrapping between both pages, it jumps straight to the next one</Text>\n      <View style={styles.breakable} wrap={false} />\n    </Page>\n  </Document>\n);\n\nReactPDF.render(doc);\n"
  },
  {
    "path": "examples/ellipse.txt",
    "content": "const styles = StyleSheet.create({\n  page: { padding: 60 },\n});\n\nconst doc = (\n  <Document>\n    <Page style={styles.page} size=\"A4\">\n      <Svg viewBox=\"0 0 200 100\">\n        <Ellipse\n          cx=\"100\"\n          cy=\"50\"\n          rx=\"80\"\n          ry=\"40\"\n          fill=\"tomato\"\n          stroke=\"gray\"\n        />\n      </Svg>\n    </Page>\n  </Document>\n);\n\nReactPDF.render(doc);\n"
  },
  {
    "path": "examples/emoji.txt",
    "content": "const styles = StyleSheet.create({\n  container: {\n    height: 700,\n    marginVertical: 70,\n    marginHorizontal: \"10%\"\n  },\n  text: {\n    fontSize: 100,\n    textAlign: 'center'\n  }\n});\n\nFont.registerEmojiSource({\n  format: 'png',\n  url: 'https://cdnjs.cloudflare.com/ajax/libs/twemoji/14.0.2/72x72/',\n});\n\nconst MyDocument = () => (\n  <Document>\n    <Page>\n      <View style={styles.container}>\n        <Text style={styles.text}>\n          😀💩👻🙈\n        </Text>\n      </View>\n    </Page>\n  </Document>\n);\n\nReactPDF.render(<MyDocument />);\n"
  },
  {
    "path": "examples/fixed-components.txt",
    "content": "const styles = StyleSheet.create({\n  container: {\n    height: 1200,\n    width: '100%',\n  },\n  fixed: {\n    bottom: 0,\n    left: 0,\n    width: '100%',\n    padding: 10,\n    position: 'absolute',\n  }\n});\n\nconst MyDocument = () => (\n  <Document>\n    <Page>\n      <View style={styles.container} />\n\n      <Text style={styles.fixed} fixed>\n        I'm fixed to each page\n      </Text>\n    </Page>\n  </Document>\n);\n\nReactPDF.render(<MyDocument />);\n"
  },
  {
    "path": "examples/font-register.txt",
    "content": "Font.register({\n  family: 'Roboto',\n  fonts: [\n    {\n      src: `fonts/Roboto-Regular.ttf`\n    },\n    {\n      src: `fonts/Roboto-Bold.ttf`,\n      fontWeight: 'bold'\n    },\n    {\n      src: `fonts/Roboto-Italic.ttf`,\n      fontWeight: 'normal',\n      fontStyle: 'italic'\n    },\n    {\n      src: `fonts/Roboto-BoldItalic.ttf`,\n      fontWeight: 'bold',\n      fontStyle: 'italic'\n    }\n  ]\n})\n\nconst MyDocument = () => (\n  <Document>\n    <Page>\n      <Text style={{ fontFamily: 'Roboto' }}>\n        Velit sit cillum adipisicing aliqua id sint cillum occaecat fugiat adipisicing non elit.\n      </Text>\n      <Text style={{ fontFamily: 'Roboto', fontWeight: 'bold' }}>\n        Velit sit cillum adipisicing aliqua id sint cillum occaecat fugiat adipisicing non elit.\n      </Text>\n      <Text style={{ fontFamily: 'Roboto', fontStyle: 'italic' }}>\n        Velit sit cillum adipisicing aliqua id sint cillum occaecat fugiat adipisicing non elit.\n      </Text>\n      <Text style={{ fontFamily: 'Roboto', fontStyle: 'italic', fontWeight: 700 }}>\n        Velit sit cillum adipisicing aliqua id sint cillum occaecat fugiat adipisicing non elit.\n      </Text>\n    </Page>\n  </Document>\n);\n\nReactPDF.render(<MyDocument />);\n"
  },
  {
    "path": "examples/formfield.txt",
    "content": "const Address = (props) => (\n  <FormField name={props.name.toLowerCase()}>\n    <Text style={styles.heading}>{props.name}</Text>\n    <Text>Street</Text>\n    <TextInput\n      name=\"street\"\n      noSpell\n      required={props.required}\n      style={styles.textinput}/>\n    <Text>House Nr.</Text>\n    <TextInput\n      name=\"house\"\n      noSpell\n      required={props.required}\n      style={styles.textinput}/>\n    <Text>Postal code</Text>\n    <TextInput\n      name=\"postal-code\"\n      noSpell\n      required={props.required}\n      style={styles.textinput}/>\n    <Text>City</Text>\n    <TextInput\n      name=\"city\"\n      noSpell\n      required={props.required}\n      style={styles.textinput}/>\n    <Text>Country</Text>\n    <TextInput\n      name=\"country\"\n      noSpell\n      required={props.required}\n      style={styles.textinput}/>\n  </FormField>\n)\n\nconst Invoice = () => (\n  <View>\n    <Text style={styles.heading}>Invoice</Text>\n    <View style={styles.verticalFlex}>\n      <View style={styles.flexGrow}>\n        <Address name=\"Billing\" required/>\n      </View>\n      <View style={styles.flexGrow}>\n        <Address name=\"Shipping\"/>\n      </View>\n    </View>\n    \n    <Text>Name of Product</Text>\n    <TextInput\n      name=\"product\"\n      noSpell\n      required\n      style={styles.textinput}/>\n  </View>\n);\n\nconst styles = StyleSheet.create({\n  page: {\n    padding: 60\n  },\n  heading: {\n    fontSize: 24,\n    textAlign: 'center',\n    marginBottom: 40\n  },\n  textinput: {\n    height: 14.4,\n    marginRight: 50,\n    marginTop: 10,\n    marginBottom: 20\n  },\n  verticalFlex: {\n    display: 'flex',\n    flexDirection: 'row',\n    justifyContent: 'space-around'\n  },\n  flexGrow: {\n    flexGrow: 1\n  }\n});\n\nconst doc = (\n  <Document>\n    <Page style={styles.page} size=\"A4\">\n      <Invoice />\n    </Page>\n  </Document>\n);\n\nReactPDF.render(doc);"
  },
  {
    "path": "examples/fractals.txt",
    "content": "const styles = StyleSheet.create({\n  row: {\n    flexGrow: 1,\n    flexDirection: 'row',\n  },\n  column: {\n    flexGrow: 1,\n  },\n  text: {\n    margin: 10,\n    fontSize: 10,\n    color: 'white',\n  },\n});\n\nconst palette = [\n  '#781c81',\n  '#521b80',\n  '#442f8b',\n  '#3f4c9f',\n  '#4069b4',\n  '#4582c1',\n  '#4e96bd',\n  '#5aa6a9',\n  '#68b090',\n  '#7ab878',\n  '#8dbc64',\n  '#a2be56',\n  '#b7bd4b',\n  '#c9b843',\n  '#d8ae3d',\n  '#e29e37',\n  '#e78632',\n  '#e6672d',\n  '#e14427',\n  '#d92120',\n];\n\nconst toggle = direction => (direction === 'column' ? 'row' : 'column');\n\n// Creates Fractal Component that renders it's step with a background color\nconst Fractal = ({ steps, direction = 'column' }) => {\n  if (steps === 0) {\n    return null;\n  }\n\n  const fractalStyle = {\n    flexGrow: 1,\n    alignItems: 'center',\n    justifyContent: 'center',\n    backgroundColor: palette[steps],\n  };\n\n  return (\n    <View style={styles[direction]}>\n      <Fractal direction={toggle(direction)} steps={steps - 1} />\n      <View style={fractalStyle}>\n        <Text style={styles.text}>{steps}</Text>\n      </View>\n    </View>\n  );\n};\n\nconst doc = (\n  <Document\n    title=\"Fractals\"\n    author=\"John Doe\"\n    subject=\"Rendering fractals with react-pdf\"\n    keywords={['react', 'pdf', 'fractals']}\n  >\n    <Page size=\"A4\">\n      <Fractal steps={18} />\n    </Page>\n\n    <Page orientation=\"landscape\" size=\"A4\">\n      <Fractal steps={14} />\n    </Page>\n\n    <Page size=\"B4\">\n      <Fractal steps={10} />\n    </Page>\n  </Document>\n);\n\nReactPDF.render(doc);\n"
  },
  {
    "path": "examples/g.txt",
    "content": "const styles = StyleSheet.create({\n  page: { padding: 60 },\n});\n\nconst doc = (\n  <Document>\n    <Page style={styles.page} size=\"A4\">\n      <Svg viewBox=\"0 0 100 100\">\n        <G fill=\"white\" stroke=\"green\" stroke-width=\"5\">\n          <Circle cx=\"40\" cy=\"40\" r=\"25\" />\n          <Circle cx=\"60\" cy=\"60\" r=\"25\" />\n        </G>\n      </Svg>\n    </Page>\n  </Document>\n);\n\nReactPDF.render(doc);\n"
  },
  {
    "path": "examples/hyphenation-callback.txt",
    "content": "// Register hyphenation callback.\n// In this example, we enable words to break in half\nFont.registerHyphenationCallback(word => {\n  const middle = Math.floor(word.length / 2);\n  const parts = word.length === 1 ? [word] : [word.substr(0, middle), word.substr(middle)];\n\n  // Check console to see words parts\n  console.log(word, parts);\n\n  return parts;\n});\n\nconst styles = StyleSheet.create({\n  container: {\n    padding: 50\n  },\n  text: {\n    textAlign: 'justify'\n  }\n});\n\nconst MyDocument = () => (\n  <Document>\n    <Page style={styles.container}>\n      <Text style={styles.text}>\n        Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n        Sed vulputate erat id sagittis porta. Phasellus ut diam\n        sit amet mi sagittis faucibus sed in purus. Etiam pretium\n        et lacus sit amet fringilla. Aenean hendrerit volutpat nulla,\n        at facilisis ante bibendum non. Integer ut nulla nulla.\n        Etiam ornare interdum iaculis. Sed lectus nisl, faucibus\n        vitae posuere ut, lobortis in lectus. Donec ac magna in\n        libero tincidunt volutpat. Donec ut varius quam. Duis ornare\n        justo quis sapien bibendum cursus.\n      </Text>\n    </Page>\n  </Document>\n);\n\nReactPDF.render(<MyDocument />);\n"
  },
  {
    "path": "examples/images.txt",
    "content": "const styles = StyleSheet.create({\n  page: { flexDirection: 'row' },\n  image: { flexGrow: 8, backgroundColor: 'grey', padding: 10 },\n  text: {\n    flexGrow: 3,\n    backgroundColor: '#f0f0f0',\n    color: '#212121',\n    paddingHorizontal: 50,\n    paddingVertical: 30,\n  },\n});\n\nconst doc = (\n  <Document>\n    <Page style={styles.page} size={[1500, 600]}>\n      <Image\n        style={styles.image}\n        src=\"/images/mountains.jpg\"\n      />\n      <Text style={styles.text}>\n        Lorem ipsum dolor sit amet, consectetur adipisicing elit,\n        sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n        Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi\n        ut aliquip ex ea commodo consequat. Duis aute irure dolor in\n        reprehenderit\n        in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n        Excepteur sint occaecat cupidatat non proident,\n        sunt in culpa qui officia deserunt mollit anim id est laborum.\n        Lorem ipsum dolor sit amet, consectetur adipisicing elit,\n        sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n        Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi\n        ut aliquip ex ea commodo consequat. Duis aute irure dolor in\n        reprehenderit\n        in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n        Excepteur sint occaecat cupidatat non proident,\n        sunt in culpa qui officia deserunt mollit anim id est laborum.\n        Lorem ipsum dolor sit amet, consectetur adipisicing elit,\n        sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n        Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi\n        ut aliquip ex ea commodo consequat. Duis aute irure dolor in\n        reprehenderit\n        in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n        Excepteur sint occaecat cupidatat non proident,\n        sunt in culpa qui officia deserunt mollit anim id est laborum.\n      </Text>\n    </Page>\n  </Document>\n);\n\nReactPDF.render(doc);\n"
  },
  {
    "path": "examples/inline-styles.txt",
    "content": "const doc = (\n  <Document>\n    <Page size=\"A4\" style={{ backgroundColor: 'tomato' }}>\n      <View style={{ color: 'white', textAlign: 'center', margin: 30 }}>\n        <Text>Section #1</Text>\n      </View>\n    </Page>\n  </Document>\n);\n\nReactPDF.render(doc);\n"
  },
  {
    "path": "examples/knobs.txt",
    "content": "const styles = StyleSheet.create({\n  select: {\n    height: '9%',\n    alignItems: 'center',\n    flexDirection: 'row',\n    paddingHorizontal: '30px',\n  },\n  bar: {\n    flexGrow: 1,\n    height: '10px',\n    backgroundColor: 'gray',\n  },\n  barMiddle: {\n    width: '50%',\n    height: '100%',\n    backgroundColor: 'lightgray',\n    margin: 'auto',\n  },\n  knob: {\n    alignItems: 'center',\n    justifyContent: 'center',\n    width: '20px',\n    height: '20px',\n    borderRadius: 10,\n    borderWidth: 3,\n    borderColor: 'orange',\n    position: 'absolute',\n    backgroundColor: 'white',\n    fontSize: 8,\n    top: -6,\n  },\n  text: {\n    fontSize: 10,\n  },\n});\n\nconst Knob = ({ value }) =>\n  <View style={[styles.knob, { left: `${value - 3}%` }]}>\n    <Text style={{ fontSize: 8, marginTop: 4 }}>\n      {value}\n    </Text>\n  </View>;\n\nconst Select = props =>\n  <View style={styles.select}>\n    <Text style={[styles.text, { marginRight: '15px' }]}>0%</Text>\n    <View style={styles.bar}>\n      <View style={styles.barMiddle} />\n      <Knob {...props} />\n    </View>\n    <Text style={[styles.text, { marginLeft: '15px' }]}>100%</Text>\n  </View>;\n\nconst doc = (\n  <Document>\n    <Page size=\"A5\">\n      <Select value={0} />\n      <Select value={10} />\n      <Select value={20} />\n      <Select value={30} />\n      <Select value={40} />\n      <Select value={50} />\n      <Select value={60} />\n      <Select value={70} />\n      <Select value={80} />\n      <Select value={90} />\n      <Select value={100} />\n    </Page>\n  </Document>\n);\n\nReactPDF.render(doc);\n"
  },
  {
    "path": "examples/line.txt",
    "content": "const styles = StyleSheet.create({\n  page: { padding: 60 },\n});\n\nconst doc = (\n  <Document>\n    <Page style={styles.page} size=\"A4\">\n      <Svg height=\"210\" width=\"500\">\n        <Line\n          x1=\"0\"\n          y1=\"0\"\n          x2=\"200\"\n          y2=\"200\"\n          strokeWidth={2}\n          stroke=\"rgb(255,0,0)\"\n        />\n      </Svg>\n    </Page>\n  </Document>\n);\n\nReactPDF.render(doc);\n"
  },
  {
    "path": "examples/lineargradient.txt",
    "content": "const styles = StyleSheet.create({\n  page: { padding: 60 },\n});\n\nconst doc = (\n  <Document>\n    <Page style={styles.page} size=\"A4\">\n      <Svg viewBox=\"0 0 10 20\" width=\"170\">\n        <Defs>\n          <LinearGradient id=\"myLinearGradient\">\n            <Stop offset=\"5%\" stopColor=\"gold\" />\n            <Stop offset=\"95%\" stopColor=\"red\" />\n          </LinearGradient>\n        </Defs>\n\n        <Circle cx=\"5\" cy=\"5\" r=\"4\" fill=\"url('#myLinearGradient')\" />\n      </Svg>\n    </Page>\n  </Document>\n);\n\nReactPDF.render(doc);\n"
  },
  {
    "path": "examples/math.txt",
    "content": "const styles = StyleSheet.create({\n  page: {\n    padding: 40,\n    backgroundColor: '#fafafa',\n  },\n  title: {\n    fontSize: 18,\n    fontWeight: 'bold',\n    marginBottom: 4,\n    color: '#1a1a1a',\n  },\n  subtitle: {\n    fontSize: 9,\n    color: '#888',\n    marginBottom: 20,\n  },\n  card: {\n    backgroundColor: 'white',\n    borderRadius: 5,\n    padding: 12,\n    marginBottom: 8,\n    borderWidth: 1,\n    borderColor: '#e8e8e8',\n  },\n  cardLabel: {\n    fontSize: 8,\n    color: '#999',\n    marginBottom: 6,\n    textTransform: 'uppercase',\n    letterSpacing: 0.5,\n  },\n  row: {\n    flexDirection: 'row',\n    gap: 8,\n    marginBottom: 8,\n  },\n  halfCard: {\n    flex: 1,\n    backgroundColor: 'white',\n    borderRadius: 5,\n    padding: 12,\n    borderWidth: 1,\n    borderColor: '#e8e8e8',\n  },\n  inlineRow: {\n    flexDirection: 'row',\n    alignItems: 'center',\n  },\n  inlineText: {\n    fontSize: 10,\n    color: '#333',\n  },\n  footer: {\n    marginTop: 'auto',\n    paddingTop: 12,\n    borderTopWidth: 1,\n    borderTopColor: '#e8e8e8',\n    flexDirection: 'row',\n    justifyContent: 'space-between',\n  },\n  footerText: {\n    fontSize: 7,\n    color: '#aaa',\n  },\n});\n\nconst doc = (\n  <Document>\n    <Page size=\"A4\" style={styles.page}>\n      <Text style={styles.title}>Mathematical Typesetting</Text>\n      <Text style={styles.subtitle}>\n        LaTeX expressions rendered as vector graphics via @react-pdf/math\n      </Text>\n\n      <View style={styles.card}>\n        <Text style={styles.cardLabel}>Quadratic Formula</Text>\n        <Math height={34}>{'x = \\\\frac{-b \\\\pm \\\\sqrt{b^2 - 4ac}}{2a}'}</Math>\n      </View>\n\n      <View style={styles.row}>\n        <View style={styles.halfCard}>\n          <Text style={styles.cardLabel}>Euler's Identity</Text>\n          <Math height={18}>{'e^{i\\\\pi} + 1 = 0'}</Math>\n        </View>\n        <View style={styles.halfCard}>\n          <Text style={styles.cardLabel}>Limits</Text>\n          <Math height={26}>{'\\\\lim_{x \\\\to 0} \\\\frac{\\\\sin x}{x} = 1'}</Math>\n        </View>\n      </View>\n\n      <View style={styles.row}>\n        <View style={styles.halfCard}>\n          <Text style={styles.cardLabel}>Gaussian Integral</Text>\n          <Math height={32}>\n            {'\\\\int_{-\\\\infty}^{\\\\infty} e^{-x^2} dx = \\\\sqrt{\\\\pi}'}\n          </Math>\n        </View>\n        <View style={styles.halfCard}>\n          <Text style={styles.cardLabel}>Basel Problem</Text>\n          <Math height={32}>\n            {'\\\\sum_{n=1}^{\\\\infty} \\\\frac{1}{n^2} = \\\\frac{\\\\pi^2}{6}'}\n          </Math>\n        </View>\n      </View>\n\n      <View style={styles.card}>\n        <Text style={styles.cardLabel}>Matrix Notation</Text>\n        <Math height={36}>\n          {'A = \\\\begin{pmatrix} a_{11} & a_{12} \\\\\\\\ a_{21} & a_{22} \\\\end{pmatrix}'}\n        </Math>\n      </View>\n\n      <View style={styles.card}>\n        <Text style={styles.cardLabel}>Binomial Theorem</Text>\n        <Math height={34}>\n          {'(x + y)^n = \\\\sum_{k=0}^{n} \\\\binom{n}{k} x^{n-k} y^k'}\n        </Math>\n      </View>\n\n      <View style={styles.card}>\n        <Text style={styles.cardLabel}>Maxwell's Equation (Faraday's Law)</Text>\n        <Math height={32}>\n          {'\\\\nabla \\\\times \\\\vec{E} = -\\\\frac{\\\\partial \\\\vec{B}}{\\\\partial t}'}\n        </Math>\n      </View>\n\n      <View style={styles.card}>\n        <Text style={styles.cardLabel}>Inline Usage</Text>\n        <View style={styles.inlineRow}>\n          <Text style={styles.inlineText}>The famous equation </Text>\n          <Math inline height={12}>\n            {'E = mc^2'}\n          </Math>\n          <Text style={styles.inlineText}> relates mass and energy.</Text>\n        </View>\n      </View>\n\n      <View style={styles.footer}>\n        <Text style={styles.footerText}>Generated with @react-pdf/math</Text>\n        <Text style={styles.footerText}>Powered by MathJax</Text>\n      </View>\n    </Page>\n  </Document>\n);\n\nReactPDF.render(doc);"
  },
  {
    "path": "examples/media-queries.txt",
    "content": "const styles = StyleSheet.create({\n  body: {\n    padding: 35,\n  },\n  content: {\n    padding: 20,\n    '@media max-width: 400': {\n      flexDirection: 'column',\n    },\n    '@media min-width: 400': {\n      flexDirection: 'row',\n    },\n  },\n  block: {\n    height: 150,\n    width: 150,\n    backgroundColor: 'red',\n  },\n});\n\nconst MediaComponent = () => (\n  <View style={styles.content}>\n    <View style={[styles.block, { backgroundColor: 'red' }]} />\n    <View style={[styles.block, { backgroundColor: 'green' }]} />\n  </View>\n);\n\nconst doc = (\n  <Document>\n    <Page style={styles.body} size={[500, 600]}>\n      <MediaComponent />\n    </Page>\n    <Page style={styles.body} size={[300, 600]}>\n      <MediaComponent />\n    </Page>\n  </Document>\n);\n\nReactPDF.render(doc);\n"
  },
  {
    "path": "examples/mixed-styles.txt",
    "content": "const styles = StyleSheet.create({\n  page: { backgroundColor: 'tomato' },\n  section: { textAlign: 'center', margin: 30 }\n});\n\nconst doc = (\n  <Document>\n    <Page size=\"A4\" style={styles.page}>\n      <View style={[styles.section, { color: 'white' }]}>\n        <Text>Section #1</Text>\n      </View>\n    </Page>\n  </Document>\n);\n\nReactPDF.render(doc);\n"
  },
  {
    "path": "examples/orphans-and-widows.txt",
    "content": "const styles = StyleSheet.create({\n  page: {\n    padding: 60\n  },\n  text: {\n    margin: 12,\n    fontSize: 14,\n    textAlign: 'justify',\n    fontFamily: 'Times-Roman'\n  },\n});\n\nconst doc = (\n  <Document>\n    <Page style={styles.page} size=\"A4\" debug>\n      <Text style={{ marginTop: 450 }}>Widows example. Try changing prop value</Text>\n      <Text style={styles.text} widows={4}>\n        En un lugar de la Mancha, de cuyo nombre no quiero acordarme, no ha\n        mucho tiempo que vivía un hidalgo de los de lanza en astillero, adarga\n        antigua, rocín flaco y galgo corredor. Una olla de algo más vaca que\n        carnero, salpicón las más noches, duelos y quebrantos los sábados,\n        lentejas los viernes, algún palomino de añadidura los domingos,\n        consumían las tres partes de su hacienda. El resto della concluían sayo\n        de velarte, calzas de velludo para las fiestas con sus pantuflos de lo\n        mismo, los días de entre semana se honraba con su vellori de lo más\n        fino. Tenía en su casa una ama que pasaba de los cuarenta, y una sobrina\n        que no llegaba a los veinte, y un mozo de campo y plaza, que así\n        ensillaba el rocín como tomaba la podadera. Frisaba la edad de nuestro\n        hidalgo con los cincuenta años, era de complexión recia, seco de carnes,\n        enjuto de rostro; gran madrugador y amigo de la caza. Quieren decir que\n        tenía el sobrenombre de Quijada o Quesada (que en esto hay alguna\n        diferencia en los autores que deste caso escriben), aunque por\n        conjeturas verosímiles se deja entender que se llama Quijana; pero esto\n        importa poco a nuestro cuento; basta que en la narración dél no se salga\n        un punto de la verdad\n      </Text>\n\n      <Text style={{ marginTop: 550 }}>Orphans example. Try changing prop value</Text>\n      <Text style={styles.text} orphans={4}>\n        En un lugar de la Mancha, de cuyo nombre no quiero acordarme, no ha\n        mucho tiempo que vivía un hidalgo de los de lanza en astillero, adarga\n        antigua, rocín flaco y galgo corredor. Una olla de algo más vaca que\n        carnero, salpicón las más noches, duelos y quebrantos los sábados,\n        lentejas los viernes, algún palomino de añadidura los domingos,\n        consumían las tres partes de su hacienda. El resto della concluían sayo\n        de velarte, calzas de velludo para las fiestas con sus pantuflos de lo\n        mismo, los días de entre semana se honraba con su vellori de lo más\n        fino. Tenía en su casa una ama que pasaba de los cuarenta, y una sobrina\n        que no llegaba a los veinte, y un mozo de campo y plaza, que así\n        ensillaba el rocín como tomaba la podadera. Frisaba la edad de nuestro\n        hidalgo con los cincuenta años, era de complexión recia, seco de carnes,\n        enjuto de rostro; gran madrugador y amigo de la caza. Quieren decir que\n        tenía el sobrenombre de Quijada o Quesada (que en esto hay alguna\n        diferencia en los autores que deste caso escriben), aunque por\n        conjeturas verosímiles se deja entender que se llama Quijana; pero esto\n        importa poco a nuestro cuento; basta que en la narración dél no se salga\n        un punto de la verdad\n      </Text>\n    </Page>\n  </Document>\n);\n\nReactPDF.render(doc);\n"
  },
  {
    "path": "examples/page-breaks.txt",
    "content": "const Quixote = () => (\n  <Document>\n    <Page style={styles.body} wrap>\n      <Text style={styles.title}>Don Quijote de la Mancha</Text>\n      <Text style={styles.author}>Miguel de Cervantes</Text>\n      <Image\n        style={styles.image}\n        src=\"/images/quijote1.jpg\"\n      />\n      <Text style={styles.subtitle}>\n        Capítulo I: Que trata de la condición y ejercicio del famoso hidalgo D.\n        Quijote de la Mancha\n      </Text>\n      <Text style={styles.text}>\n        En un lugar de la Mancha, de cuyo nombre no quiero acordarme, no ha\n        mucho tiempo que vivía un hidalgo de los de lanza en astillero, adarga\n        antigua, rocín flaco y galgo corredor. Una olla de algo más vaca que\n        carnero, salpicón las más noches, duelos y quebrantos los sábados,\n        lentejas los viernes, algún palomino de añadidura los domingos,\n        consumían las tres partes de su hacienda. El resto della concluían sayo\n        de velarte, calzas de velludo para las fiestas con sus pantuflos de lo\n        mismo, los días de entre semana se honraba con su vellori de lo más\n        fino. Tenía en su casa una ama que pasaba de los cuarenta, y una sobrina\n        que no llegaba a los veinte, y un mozo de campo y plaza, que así\n        ensillaba el rocín como tomaba la podadera. Frisaba la edad de nuestro\n        hidalgo con los cincuenta años, era de complexión recia, seco de carnes,\n        enjuto de rostro; gran madrugador y amigo de la caza. Quieren decir que\n        tenía el sobrenombre de Quijada o Quesada (que en esto hay alguna\n        diferencia en los autores que deste caso escriben), aunque por\n        conjeturas verosímiles se deja entender que se llama Quijana; pero esto\n        importa poco a nuestro cuento; basta que en la narración dél no se salga\n        un punto de la verdad\n      </Text>\n      <Text style={styles.emphasis}>Instead of showing the title here</Text>\n\n      <Text style={styles.subtitle} break>\n        Capítulo II: Que trata de la primera salida que de su tierra hizo el\n        ingenioso Don Quijote\n      </Text>\n\t  <Text style={[styles.emphasis, { position: 'absolute', top: 60, right: 30 }]}>\n        It breaks to the top of the next page\n      </Text>\n      <Image\n        style={styles.image}\n        src=\"/images/quijote2.png\"\n      />\n      <Text style={styles.text}>\n        Hechas, pues, estas prevenciones, no quiso aguardar más tiempo a poner\n        en efeto su pensamiento, apretándole a ello la falta que él pensaba que\n        hacía en el mundo su tardanza, según eran los agravios que pensaba\n        deshacer, tuertos que enderezar, sinrazones que emendar y abusos que\n        mejorar y deudas que satisfacer. Y así, sin dar parte a persona alguna\n        de su intención y sin que nadie le viese, una mañana, antes del día, que\n        era uno de los calurosos del mes de Julio, se armó de todas sus armas,\n        subió sobre Rocinante, puesta su mal compuesta celada, embrazó su\n        adarga, tomó su lanza y por la puerta falsa de un corral salió al campo\n        con grandísimo contento y alborozo de ver con cuánta facilidad había\n        dado principio a su buen deseo. Mas apenas se vio en el campo cuando le\n        asaltó un pensamiento terrible, y tal, que por poco le hiciera dejar la\n        comenzada empresa; y fue que le vino a la memoria que no era armado\n        caballero, y que, conforme a ley de caballería, ni podía ni debía tomar\n        armas con ningún caballero; y puesto que lo fuera, había de llevar armas\n        blancas, como novel caballero, sin empresa en el escudo, hasta que por\n        su esfuerzo la ganase. Estos pensamientos le hicieron titubear en su\n        propósito; mas pudiendo más su locura que otra razón alguna, propuso de\n        hacerse armar caballero del primero que topase, a imitación de otros\n        muchos que así lo hicieron, según él había leído en los libros que tal\n        le tenían. En lo de las armas blancas, pensaba limpiarlas de manera, en\n        teniendo lugar, que lo fuesen más que un arminio; y con esto se quietó18\n        y prosiguió su camino, sin llevar otro que aquel que su caballo quería,\n        creyendo que en aquello consistía la fuerza de las aventuras\n      </Text>\n\n    </Page>\n  </Document>\n);\n\nFont.register({\n  family: 'Oswald',\n  src: 'https://fonts.gstatic.com/s/oswald/v13/Y_TKV6o8WovbUd3m_X9aAA.ttf'\n});\n\nconst styles = StyleSheet.create({\n  body: {\n    paddingTop: 35,\n    paddingBottom: 65,\n    paddingHorizontal: 35,\n  },\n  title: {\n    fontSize: 24,\n    textAlign: 'center',\n    fontFamily: 'Oswald'\n  },\n  author: {\n    fontSize: 12,\n    textAlign: 'center',\n    marginBottom: 40,\n  },\n  subtitle: {\n    fontSize: 18,\n    margin: 12,\n    fontFamily: 'Oswald'\n  },\n  text: {\n    margin: 12,\n    fontSize: 14,\n    textAlign: 'justify',\n    fontFamily: 'Times-Roman'\n  },\n  image: {\n    marginVertical: 30,\n    marginHorizontal: 100,\n  },\n  emphasis: {\n    margin: 12,\n    fontSize: 24,\n    color: '#F22300',\n    fontFamily: 'Oswald'\n  }\n});\n\nReactPDF.render(<Quixote />);\n"
  },
  {
    "path": "examples/page-numbers.txt",
    "content": "const styles = StyleSheet.create({\n  page: { padding: 60 },\n  box: { width: '100%', marginBottom: 30, borderRadius: 5 },\n  pageNumbers: {\n    position: 'absolute',\n    bottom: 20,\n    left: 0,\n    right: 0,\n    textAlign: 'center'\n  },\n});\n\nconst doc = (\n  <Document>\n    <Page style={styles.page} size=\"A4\" wrap>\n      <View style={[styles.box, { height: 400, backgroundColor: 'tomato' }]} />\n      <View style={[styles.box, { height: 280, backgroundColor: 'crimson' }]} />\n      <View style={[styles.box, { height: 600, backgroundColor: 'deepskyblue' }]} />\n      <View style={[styles.box, { height: 400, backgroundColor: 'tomato' }]} />\n      <Text style={styles.pageNumbers} render={({ pageNumber, totalPages }) => (\n        `${pageNumber} / ${totalPages}`\n      )} fixed />\n    </Page>\n  </Document>\n);\n\nReactPDF.render(doc);\n"
  },
  {
    "path": "examples/page-wrap.txt",
    "content": "const HR = () => (\n  <View style={styles.hr} />\n);\n\nconst ChapterHeading = ({ number, children, ...props }) => (\n  <View style={styles.chapterHeading} {...props}>\n    <Text style={styles.chapterNumber}>{number}</Text>\n    <View style={styles.chapterRule} />\n    <Text style={styles.chapterTitle}>{children}</Text>\n    <View style={styles.chapterRule} />\n  </View>\n);\n\nconst Quixote = () => (\n  <Document>\n    <Page style={styles.body}>\n      <Text style={styles.header} fixed>\n        Don Quijote de la Mancha\n      </Text>\n\n      <View style={styles.titleBlock}>\n        <Text style={styles.title}>Don Quijote de la Mancha</Text>\n        <HR />\n        <Text style={styles.author}>Miguel de Cervantes</Text>\n      </View>\n\n      <ChapterHeading number=\"I\">\n        Que trata de la condición y ejercicio del famoso hidalgo D. Quijote de la Mancha\n      </ChapterHeading>\n\n      <Image style={styles.chapterImage} src=\"/images/quijote1.jpg\" />\n\n      <Text style={styles.text}>\n        En un lugar de la Mancha, de cuyo nombre no quiero acordarme, no ha\n        mucho tiempo que vivía un hidalgo de los de lanza en astillero, adarga\n        antigua, rocín flaco y galgo corredor. Una olla de algo más vaca que\n        carnero, salpicón las más noches, duelos y quebrantos los sábados,\n        lentejas los viernes, algún palomino de añadidura los domingos,\n        consumían las tres partes de su hacienda. El resto della concluían sayo\n        de velarte, calzas de velludo para las fiestas con sus pantuflos de lo\n        mismo, los días de entre semana se honraba con su vellori de lo más\n        fino. Tenía en su casa una ama que pasaba de los cuarenta, y una sobrina\n        que no llegaba a los veinte, y un mozo de campo y plaza, que así\n        ensillaba el rocín como tomaba la podadera. Frisaba la edad de nuestro\n        hidalgo con los cincuenta años, era de complexión recia, seco de carnes,\n        enjuto de rostro; gran madrugador y amigo de la caza. Quieren decir que\n        tenía el sobrenombre de Quijada o Quesada (que en esto hay alguna\n        diferencia en los autores que deste caso escriben), aunque por\n        conjeturas verosímiles se deja entender que se llama Quijana; pero esto\n        importa poco a nuestro cuento; basta que en la narración dél no se salga\n        un punto de la verdad.\n      </Text>\n      <Text style={styles.text}>\n        Es, pues, de saber, que este sobredicho hidalgo, los ratos que estaba\n        ocioso (que eran los más del año) se daba a leer libros de caballerías\n        con tanta afición y gusto, que olvidó casi de todo punto el ejercicio de\n        la caza, y aun la administración de su hacienda; y llegó a tanto su\n        curiosidad y desatino en esto, que vendió muchas hanegas de tierra de\n        sembradura, para comprar libros de caballerías en que leer; y así llevó\n        a su casa todos cuantos pudo haber dellos; y de todos ningunos le\n        parecían tan bien como los que compuso el famoso Feliciano de Silva:\n        porque la claridad de su prosa, y aquellas intrincadas razones suyas, le\n        parecían de perlas; y más cuando llegaba a leer aquellos requiebros y\n        cartas de desafío, donde en muchas partes hallaba escrito: la razón de\n        la sinrazón que a mi razón se hace, de tal manera mi razón enflaquece,\n        que con razón me quejo de la vuestra fermosura, y también cuando leía:\n        los altos cielos que de vuestra divinidad divinamente con las estrellas\n        se fortifican, y os hacen merecedora del merecimiento que merece la\n        vuestra grandeza.\n      </Text>\n\n      <View style={styles.pullQuote}>\n        <Text style={styles.pullQuoteText}>\n          \"La razón de la sinrazón que a mi razón se hace, de tal manera mi razón enflaquece, que con razón me quejo de la vuestra fermosura.\"\n        </Text>\n      </View>\n\n      <Text style={styles.text}>\n        Con estas y semejantes razones perdía el pobre caballero el juicio, y\n        desvelábase por entenderlas, y desentrañarles el sentido, que no se lo\n        sacara, ni las entendiera el mismo Aristóteles, si resucitara para sólo\n        ello. No estaba muy bien con las heridas que don Belianís daba y\n        recibía, porque se imaginaba que por grandes maestros que le hubiesen\n        curado, no dejaría de tener el rostro y todo el cuerpo lleno de\n        cicatrices y señales; pero con todo alababa en su autor aquel acabar su\n        libro con la promesa de aquella inacabable aventura, y muchas veces le\n        vino deseo de tomar la pluma, y darle fin al pie de la letra como allí\n        se promete; y sin duda alguna lo hiciera, y aun saliera con ello, si\n        otros mayores y continuos pensamientos no se lo estorbaran.\n      </Text>\n      <Text style={styles.text}>\n        En resolución, él se enfrascó tanto en su lectura, que se le pasaban las\n        noches leyendo de claro en claro, y los días de turbio en turbio, y así,\n        del poco dormir y del mucho leer, se le secó el cerebro, de manera que\n        vino a perder el juicio. Llenósele la fantasía de todo aquello que leía\n        en los libros, así de encantamientos, como de pendencias, batallas,\n        desafíos, heridas, requiebros, amores, tormentas y disparates\n        imposibles, y asentósele de tal modo en la imaginación que era verdad\n        toda aquella máquina de aquellas soñadas invenciones que leía, que para\n        él no había otra historia más cierta en el mundo.\n      </Text>\n\n      <ChapterHeading number=\"II\" break>\n        Que trata de la primera salida que de su tierra hizo el ingenioso Don Quijote\n      </ChapterHeading>\n\n      <Image style={styles.chapterImage} src=\"/images/quijote2.png\" />\n\n      <Text style={styles.text}>\n        Hechas, pues, estas prevenciones, no quiso aguardar más tiempo a poner\n        en efeto su pensamiento, apretándole a ello la falta que él pensaba que\n        hacía en el mundo su tardanza, según eran los agravios que pensaba\n        deshacer, tuertos que enderezar, sinrazones que emendar y abusos que\n        mejorar y deudas que satisfacer. Y así, sin dar parte a persona alguna\n        de su intención y sin que nadie le viese, una mañana, antes del día, que\n        era uno de los calurosos del mes de Julio, se armó de todas sus armas,\n        subió sobre Rocinante, puesta su mal compuesta celada, embrazó su\n        adarga, tomó su lanza y por la puerta falsa de un corral salió al campo\n        con grandísimo contento y alborozo de ver con cuánta facilidad había\n        dado principio a su buen deseo.\n      </Text>\n      <Text style={styles.text}>\n        Yendo, pues, caminando nuestro flamante aventurero, iba hablando consigo\n        mesmo, y diciendo: —¿Quién duda, sino que en los venideros tiempos,\n        cuando salga a luz la verdadera historia de mis famosos hechos, que el\n        sabio que los escribiere no ponga, cuando llegue a contar esta mi\n        primera salida tan de mañana, desta manera?: Apenas había el rubicundo\n        Apolo tendido por la faz de la ancha y espaciosa tierra las doradas\n        hebras de sus hermosos cabellos, y apenas los pequeños y pintados\n        pajarillos con sus arpadas lenguas habían saludado con dulce y meliflua\n        armonía la venida de la rosada Aurora, que, dejando la blanda cama del\n        celoso marido, por las puertas y balcones del manchego horizonte a los\n        mortales se mostraba, cuando el famoso caballero don Quijote de la\n        Mancha, dejando las ociosas plumas, subió sobre su famoso caballo\n        Rocinante y comenzó a caminar por el antiguo y conocido Campo de\n        Montiel.\n      </Text>\n      <Text style={styles.text}>\n        Casi todo aquel día caminó sin acontecerle cosa que de contar fuese, de\n        lo cual se desesperaba, porque quisiera topar luego luego con quien\n        hacer experiencia del valor de su fuerte brazo. Autores hay que dicen\n        que la primera aventura que le avino fue la del Puerto Lápice, otros\n        dicen que la de los molinos de viento; pero lo que yo he podido\n        averiguar en este caso, y lo que he hallado escrito en los anales de la\n        Mancha, es que él anduvo todo aquel día, y, al anochecer, su rocín y él\n        se hallaron cansados y muertos de hambre, y que, mirando a todas partes\n        por ver si descubriría algún castillo o alguna majada de pastores donde\n        recogerse y adonde pudiese remediar su mucha hambre y necesidad, vio, no\n        lejos del camino por donde iba, una venta, que fue como si viera una\n        estrella que, no a los portales, sino a los alcázares de su redención le\n        encaminaba. Diose priesa a caminar, y llegó a ella a tiempo que\n        anochecía.\n      </Text>\n      <Text style={styles.pageNumber} render={({ pageNumber, totalPages }) => (\n        `${pageNumber} / ${totalPages}`\n      )} fixed />\n    </Page>\n  </Document>\n);\n\nFont.register({\n  family: 'Oswald',\n  src: 'https://fonts.gstatic.com/s/oswald/v13/Y_TKV6o8WovbUd3m_X9aAA.ttf'\n});\n\nconst styles = StyleSheet.create({\n  titleBlock: {\n    alignItems: 'center',\n    marginBottom: 8,\n  },\n  title: {\n    fontSize: 24,\n    fontFamily: 'Oswald',\n    textAlign: 'center',\n    color: '#2c1810',\n    letterSpacing: 2,\n    textTransform: 'uppercase',\n  },\n  hr: {\n    borderBottomWidth: 1,\n    borderBottomColor: '#8B4513',\n    width: 60,\n    marginVertical: 16,\n    alignSelf: 'center',\n  },\n  author: {\n    fontSize: 13,\n    textAlign: 'center',\n    color: '#8B4513',\n    fontFamily: 'Times-Roman',\n    fontStyle: 'italic',\n  },\n  body: {\n    paddingTop: 50,\n    paddingBottom: 65,\n    paddingHorizontal: 65,\n  },\n  header: {\n    fontSize: 8,\n    marginBottom: 24,\n    textAlign: 'center',\n    color: '#999',\n    letterSpacing: 3,\n    textTransform: 'uppercase',\n  },\n  chapterHeading: {\n    alignItems: 'center',\n    marginBottom: 20,\n    paddingTop: 20,\n  },\n  chapterNumber: {\n    fontSize: 36,\n    fontFamily: 'Oswald',\n    color: '#8B4513',\n    marginBottom: 8,\n  },\n  chapterRule: {\n    borderBottomWidth: 0.5,\n    borderBottomColor: '#8B4513',\n    width: 40,\n    marginVertical: 8,\n  },\n  chapterTitle: {\n    fontSize: 14,\n    fontFamily: 'Times-Roman',\n    fontStyle: 'italic',\n    textAlign: 'center',\n    color: '#555',\n    maxWidth: 320,\n    lineHeight: 1.6,\n  },\n  text: {\n    marginBottom: 10,\n    fontSize: 11,\n    textAlign: 'justify',\n    fontFamily: 'Times-Roman',\n    lineHeight: 1.7,\n    color: '#333',\n  },\n  pullQuote: {\n    marginVertical: 16,\n    marginHorizontal: 30,\n    paddingLeft: 16,\n    borderLeftWidth: 2,\n    borderLeftColor: '#8B4513',\n  },\n  pullQuoteText: {\n    fontSize: 12,\n    fontFamily: 'Times-Roman',\n    fontStyle: 'italic',\n    lineHeight: 1.7,\n    color: '#555',\n  },\n  chapterImage: {\n    marginVertical: 16,\n    marginHorizontal: 60,\n  },\n  pageNumber: {\n    position: 'absolute',\n    fontSize: 9,\n    bottom: 30,\n    left: 0,\n    right: 0,\n    textAlign: 'center',\n    color: '#999',\n  },\n});\n\nReactPDF.render(<Quixote />);\n"
  },
  {
    "path": "examples/path.txt",
    "content": "const styles = StyleSheet.create({\n  page: { padding: 60 },\n});\n\nconst doc = (\n  <Document>\n    <Page style={styles.page} size=\"A4\">\n      <Svg width=\"190\" height=\"160\">\n        <Path\n          d=\"M 10 80 C 40 10, 65 10, 95 80 S 150 150, 180 80\"\n          stroke=\"rgb(128, 255, 0)\"\n          strokeWidth={3}\n        />\n      </Svg>\n    </Page>\n  </Document>\n);\n\nReactPDF.render(doc);\n"
  },
  {
    "path": "examples/picker-formlist.txt",
    "content": "const Combos = () => {\n  // Static List of names from https://restcountries.com\n  const countries = [\"Afghanistan\", \"Albania\", \"Algeria\", \"American Samoa\", \"Andorra\", \"Angola\", \"Anguilla\", \"Antarctica\", \"Antigua and Barbuda\", \"Argentina\", \"Armenia\", \"Aruba\", \"Australia\", \"Austria\", \"Azerbaijan\", \"Bahamas\", \"Bahrain\", \"Bangladesh\", \"Barbados\", \"Belarus\", \"Belgium\", \"Belize\", \"Benin\", \"Bermuda\", \"Bhutan\", \"Bolivia\", \"Bosnia and Herzegovina\", \"Botswana\", \"Bouvet Island\", \"Brazil\", \"British Indian Ocean Territory\", \"British Virgin Islands\", \"Brunei\", \"Bulgaria\", \"Burkina Faso\", \"Burundi\", \"Cambodia\", \"Cameroon\", \"Canada\", \"Cape Verde\", \"Caribbean Netherlands\", \"Cayman Islands\", \"Central African Republic\", \"Chad\", \"Chile\", \"China\", \"Christmas Island\", \"Cocos (Keeling) Islands\", \"Colombia\", \"Comoros\", \"Cook Islands\", \"Costa Rica\", \"Croatia\", \"Cuba\", \"Curaçao\", \"Cyprus\", \"Czechia\", \"DR Congo\", \"Denmark\", \"Djibouti\", \"Dominica\", \"Dominican Republic\", \"Ecuador\", \"Egypt\", \"El Salvador\", \"Equatorial Guinea\", \"Eritrea\", \"Estonia\", \"Eswatini\", \"Ethiopia\", \"Falkland Islands\", \"Faroe Islands\", \"Fiji\", \"Finland\", \"France\", \"French Guiana\", \"French Polynesia\", \"French Southern and Antarctic Lands\", \"Gabon\", \"Gambia\", \"Georgia\", \"Germany\", \"Ghana\", \"Gibraltar\", \"Greece\", \"Greenland\", \"Grenada\", \"Guadeloupe\", \"Guam\", \"Guatemala\", \"Guernsey\", \"Guinea\", \"Guinea-Bissau\", \"Guyana\", \"Haiti\", \"Heard Island and McDonald Islands\", \"Honduras\", \"Hong Kong\", \"Hungary\", \"Iceland\", \"India\", \"Indonesia\", \"Iran\", \"Iraq\", \"Ireland\", \"Isle of Man\", \"Israel\", \"Italy\", \"Ivory Coast\", \"Jamaica\", \"Japan\", \"Jersey\", \"Jordan\", \"Kazakhstan\", \"Kenya\", \"Kiribati\", \"Kosovo\", \"Kuwait\", \"Kyrgyzstan\", \"Laos\", \"Latvia\", \"Lebanon\", \"Lesotho\", \"Liberia\", \"Libya\", \"Liechtenstein\", \"Lithuania\", \"Luxembourg\", \"Macau\", \"Madagascar\", \"Malawi\", \"Malaysia\", \"Maldives\", \"Mali\", \"Malta\", \"Marshall Islands\", \"Martinique\", \"Mauritania\", \"Mauritius\", \"Mayotte\", \"Mexico\", \"Micronesia\", \"Moldova\", \"Monaco\", \"Mongolia\", \"Montenegro\", \"Montserrat\", \"Morocco\", \"Mozambique\", \"Myanmar\", \"Namibia\", \"Nauru\", \"Nepal\", \"Netherlands\", \"New Caledonia\", \"New Zealand\", \"Nicaragua\", \"Niger\", \"Nigeria\", \"Niue\", \"Norfolk Island\", \"North Korea\", \"North Macedonia\", \"Northern Mariana Islands\", \"Norway\", \"Oman\", \"Pakistan\", \"Palau\", \"Palestine\", \"Panama\", \"Papua New Guinea\", \"Paraguay\", \"Peru\", \"Philippines\", \"Pitcairn Islands\", \"Poland\", \"Portugal\", \"Puerto Rico\", \"Qatar\", \"Republic of the Congo\", \"Romania\", \"Russia\", \"Rwanda\", \"Réunion\", \"Saint Barthélemy\", \"Saint Helena, Ascension and Tristan da Cunha\", \"Saint Kitts and Nevis\", \"Saint Lucia\", \"Saint Martin\", \"Saint Pierre and Miquelon\", \"Saint Vincent and the Grenadines\", \"Samoa\", \"San Marino\", \"Saudi Arabia\", \"Senegal\", \"Serbia\", \"Seychelles\", \"Sierra Leone\", \"Singapore\", \"Sint Maarten\", \"Slovakia\", \"Slovenia\", \"Solomon Islands\", \"Somalia\", \"South Africa\", \"South Georgia\", \"South Korea\", \"South Sudan\", \"Spain\", \"Sri Lanka\", \"Sudan\", \"Suriname\", \"Svalbard and Jan Mayen\", \"Sweden\", \"Switzerland\", \"Syria\", \"São Tomé and Príncipe\", \"Taiwan\", \"Tajikistan\", \"Tanzania\", \"Thailand\", \"Timor-Leste\", \"Togo\", \"Tokelau\", \"Tonga\", \"Trinidad and Tobago\", \"Tunisia\", \"Turkey\", \"Turkmenistan\", \"Turks and Caicos Islands\", \"Tuvalu\", \"Uganda\", \"Ukraine\", \"United Arab Emirates\", \"United Kingdom\", \"United States\", \"United States Minor Outlying Islands\", \"United States Virgin Islands\", \"Uruguay\", \"Uzbekistan\", \"Vanuatu\", \"Vatican City\", \"Venezuela\", \"Vietnam\", \"Wallis and Futuna\", \"Western Sahara\", \"Yemen\", \"Zambia\", \"Zimbabwe\"];\n  \n  return (\n    <View>\n      <Text style={styles.break}>Country-Picker:</Text>\n      <Picker\n        name=\"countries\"\n        select={['Choose a country', ...countries]}\n        value=\"Choose a country\"\n        defaultValue=\"Choose a country\"\n        style={[styles.picker, styles.break]}\n        />\n      <Text style={styles.break}>Country-FormList:</Text>\n      <FormList\n        name=\"countries\"\n        select={countries}\n        style={[styles.formlist, styles.break]}\n        />\n    </View>\n  )\n};\n\nconst styles = StyleSheet.create({\n  page: {\n    padding: 60\n  },\n  picker: {\n    height: '20px'\n  },\n  formlist: {\n    height: '100px'\n  },\n  break: {\n    marginBottom: 10\n  }\n});\n\nconst doc = (\n  <Document>\n    <Page style={styles.page} size=\"A4\">\n      <Combos />\n    </Page>\n  </Document>\n);\n\nReactPDF.render(doc);"
  },
  {
    "path": "examples/polygon.txt",
    "content": "const styles = StyleSheet.create({\n  page: { padding: 60 },\n});\n\nconst doc = (\n  <Document>\n    <Page style={styles.page} size=\"A4\">\n      <Svg height=\"210\" width=\"500\">\n        <Polygon\n          points=\"200,10 250,190 160,210\"\n          fill=\"tomato\"\n          stroke=\"gray\"\n          strokeWidth={1}\n        />\n      </Svg>\n    </Page>\n  </Document>\n);\n\nReactPDF.render(doc);\n"
  },
  {
    "path": "examples/polyline.txt",
    "content": "const styles = StyleSheet.create({\n  page: { padding: 60 },\n});\n\nconst doc = (\n  <Document>\n    <Page style={styles.page} size=\"A4\">\n      <Svg height=\"200\" width=\"500\">\n        <Polyline\n          points=\"20,20 40,25 60,40 80,120 120,140 200,180\"\n          stroke=\"black\"\n          strokeWidth={3}\n        />\n      </Svg>\n    </Page>\n  </Document>\n);\n\nReactPDF.render(doc);\n"
  },
  {
    "path": "examples/quick-start.txt",
    "content": "// import React from 'react';\n// import { Page, Text, View, Document, StyleSheet } from '@react-pdf/renderer';\n\n// Create styles\nconst styles = StyleSheet.create({\n  page: {\n    flexDirection: 'row',\n    backgroundColor: '#E4E4E4'\n  },\n  section: {\n    margin: 10,\n    padding: 10,\n    flexGrow: 1\n  }\n});\n\n// Create Document Component\nconst MyDocument = () => (\n  <Document>\n    <Page size=\"A4\" style={styles.page}>\n      <View style={styles.section}>\n        <Text>Section #1</Text>\n      </View>\n      <View style={styles.section}>\n        <Text>Section #2</Text>\n      </View>\n    </Page>\n  </Document>\n);\n\nReactPDF.render(<MyDocument />);\n"
  },
  {
    "path": "examples/radialgradient.txt",
    "content": "const styles = StyleSheet.create({\n  page: { padding: 60 },\n});\n\nconst doc = (\n  <Document>\n    <Page style={styles.page} size=\"A4\">\n      <Svg viewBox=\"0 0 10 20\" width=\"170\">\n        <Defs>\n          <RadialGradient id=\"myRadialGradient\">\n            <Stop offset=\"10%\" stopColor=\"gold\" />\n            <Stop offset=\"95%\" stopColor=\"red\" />\n          </RadialGradient>\n        </Defs>\n\n        <Circle cx=\"5\" cy=\"14\" r=\"4\" fill=\"url('#myRadialGradient')\" />\n      </Svg>\n    </Page>\n  </Document>\n);\n\nReactPDF.render(doc);\n"
  },
  {
    "path": "examples/rect.txt",
    "content": "const styles = StyleSheet.create({\n  page: { padding: 60 },\n});\n\nconst doc = (\n  <Document>\n    <Page style={styles.page} size=\"A4\">\n      <Svg viewBox=\"0 0 220 100\">\n\n        <Rect\n          width=\"100\"\n          height=\"100\"\n          fill=\"black\"\n        />\n\n        <Rect\n          x=\"120\"\n          rx=\"15\"\n          ry=\"15\"\n          width=\"100\"\n          height=\"100\"\n          fill=\"black\"\n        />\n      </Svg>\n    </Page>\n  </Document>\n);\n\nReactPDF.render(doc);\n"
  },
  {
    "path": "examples/resume.txt",
    "content": "const styles = StyleSheet.create({\n  container: {\n    flexDirection: 'row',\n    '@media max-width: 400': {\n      flexDirection: 'column',\n    },\n  },\n  image: {\n    marginBottom: 10,\n    '@media max-width: 400': {\n      width: 290,\n    },\n  },\n  title: {\n    fontSize: 14,\n    marginBottom: 10,\n    textTransform: 'uppercase',\n  },\n  leftColumn: {\n    flexDirection: 'column',\n    width: 170,\n    marginLeft: 30,\n    marginRight: 15,\n    marginTop: 20,\n    '@media max-width: 400': {\n      width: 290,\n      marginRight: 30,\n    },\n    '@media orientation: landscape': {\n      width: 200,\n      marginRight: 50,\n    },\n  },\n  rightColumn: {\n    flexDirection: 'column',\n    flexGrow: 1,\n    marginLeft: 15,\n    marginRight: 30,\n    marginTop: 20,\n    '@media max-width: 400': {\n      marginTop: 10,\n      marginLeft: 30,\n    },\n  },\n  footer: {\n    fontSize: 12,\n    textAlign: 'center',\n    marginTop: 25,\n    marginHorizontal: 30,\n    paddingVertical: 10,\n    borderWidth: 3,\n    borderColor: 'gray',\n    borderStyle: 'dashed',\n    '@media orientation: landscape': {\n      marginTop: 10,\n    },\n  },\n  item: {\n    flexDirection: 'row',\n    marginBottom: 5,\n  },\n  itemLeftColumn: {\n    flexDirection: 'column',\n    marginRight: 10,\n  },\n  itemRightColumn: {\n    flexDirection: 'column',\n    flexGrow: 9,\n  },\n  bulletPoint: {\n    fontSize: 10,\n  },\n  itemContent: {\n    fontSize: 10,\n    fontFamily: 'Lato',\n  },\n  headerContainer: {\n    flexDirection: 'row',\n    marginTop: 30,\n    marginLeft: 30,\n    marginRight: 30,\n    marginBottom: 0,\n    borderBottomWidth: 2,\n    borderBottomColor: '#112131',\n    borderBottomStyle: 'solid',\n    alignItems: 'stretch',\n  },\n  detailColumn: {\n    flexDirection: 'column',\n    flexGrow: 9,\n  },\n  linkColumn: {\n    flexDirection: 'column',\n    flexGrow: 2,\n    alignSelf: 'flex-end',\n    justifySelf: 'flex-end',\n  },\n  name: {\n    fontSize: 24,\n    textTransform: 'uppercase',\n  },\n  subtitle: {\n    fontSize: 10,\n    justifySelf: 'flex-end',\n    textTransform: 'uppercase',\n  },\n  link: {\n    fontSize: 10,\n    color: 'black',\n    textDecoration: 'none',\n    alignSelf: 'flex-end',\n    justifySelf: 'flex-end',\n  },\n  educationContainer: {\n    marginBottom: 10,\n  },\n  school: {\n    fontSize: 10,\n  },\n  degree: {\n    fontSize: 10,\n  },\n  candidate: {\n    fontSize: 10,\n  },\n  skillTitle: {\n    fontSize: 11,\n    marginBottom: 10,\n  },\n  skills: {\n    fontSize: 10,\n    marginBottom: 10,\n  },\n  experienceContainer: {\n    marginBottom: 10,\n  },\n  date: {\n    fontSize: 11,\n  },\n  detailContainer: {\n    flexDirection: 'row',\n  },\n  detailLeftColumn: {\n    flexDirection: 'column',\n    marginLeft: 10,\n    marginRight: 10,\n  },\n  detailRightColumn: {\n    flexDirection: 'column',\n    flexGrow: 9,\n  },\n  bulletPoint: {\n    fontSize: 10,\n  },\n  details: {\n    fontSize: 10,\n  },\n  headerContainer: {\n    flexDirection: 'row',\n  },\n  experienceLeftColumn: {\n    flexDirection: 'column',\n    flexGrow: 9,\n  },\n  experienceRightColumn: {\n    flexDirection: 'column',\n    flexGrow: 1,\n    alignItems: 'flex-end',\n    justifySelf: 'flex-end',\n  },\n  experienceTitle: {\n    fontSize: 11,\n    color: 'black',\n    textDecoration: 'none',\n  },\n});\n\nconst Header = () => (\n  <View style={styles.headerContainer}>\n    <View style={styles.detailColumn}>\n      <Text style={styles.name}>Luke Skywalker</Text>\n      <Text style={styles.subtitle}>Jedi Master</Text>\n    </View>\n    <View style={styles.linkColumn}>\n      <Link style={styles.link}>luke@theforce.com</Link>\n    </View>\n  </View>\n);\n\nconst Title = ({ children }) => <Text style={styles.title}>{children}</Text>;\n\nconst List = ({ children }) => children;\n\nconst Item = ({ children }) => (\n  <View style={styles.item}>\n    <View style={styles.itemLeftColumn}>\n      <Text style={styles.bulletPoint}>•</Text>\n    </View>\n    <View style={styles.itemRightColumn}>\n      <Text style={styles.itemContent}>{children}</Text>\n    </View>\n  </View>\n);\n\nconst Education = () => (\n  <View style={styles.educationContainer}>\n    <Title>Education</Title>\n    <Text style={styles.school}>Jedi Academy</Text>\n    <Text style={styles.degree}>Jedi Master</Text>\n    <Text style={styles.candidate}>A long, long time ago</Text>\n  </View>\n);\n\nconst SkillEntry = ({ name, skills }) => (\n  <View>\n    <Text style={styles.skillTitle}>{name}</Text>\n    <List>{skills.map((skill, i) => <Item key={i}>{skill}</Item>)}</List>\n  </View>\n);\n\nconst Skills = () => (\n  <View>\n    <Title>Skills</Title>\n    <SkillEntry\n      name=\"Combat Abilities\"\n      skills={[\n        'Completed Jedi Master training and built a lightsaber from scratch in order to do battle against the Empire',\n        'Defeated the Rancor and rescued Princess Leia from Jabba the Hutt',\n        'Competent fighter pilot as well as an excelent shot with nearly any weapon',\n      ]}\n    />\n  </View>\n);\n\nconst ExperienceEntry = ({ company, details, position, date }) => {\n  const title = `${company} | ${position}`;\n  return (\n    <View style={styles.experienceContainer}>\n      <View style={styles.headerContainer}>\n        <View style={styles.experienceLeftColumn}>\n          <Text style={styles.experienceTitle}>{title}</Text>\n        </View>\n        <View style={styles.experneiceRightColumn}>\n          <Text style={styles.date}>{date}</Text>\n        </View>\n      </View>\n      <List>\n        {details.map((detail, i) => (\n          <Item key={i} style={styles.detailContainer}>\n            {detail}\n          </Item>\n        ))}\n      </List>\n    </View>\n  );\n};\n\nconst Experience = () => (\n  <View>\n    <Title>Experience</Title>\n    <ExperienceEntry\n      company=\"Jedi Temple, Coruseant\"\n      date=\"A long, long time ago\"\n      details={[\n        'Started a new Jedi Temple in order to train the next generation of Jedi Masters',\n        'Discovered and trained a new generation of Jedi Knights, which he recruited from within the New Republic',\n        'Comunees with decesased Jedi Masters such as Anakin Skywalker, Yoda, Obi-Wan Kenobi in order to learn the secrets of the Jedi Order',\n      ]}\n      position=\"Head Jedi Master\"\n    />\n    <ExperienceEntry\n      company=\"Revel Alliance\"\n      date=\"A long, long time ago\"\n      details={[\n        'Lead legions of troops into battle while demostrating bravery, competence and honor',\n        'Created complicated battle plans in conjunction with other Rebel leaders in order to ensure the greatest chance of success',\n        'Defeated Darth Vader in single-combat, and convinced him to betray his mentor, the Emperor',\n      ]}\n      position=\"General\"\n    />\n    <ExperienceEntry\n      company=\"Revel Alliance\"\n      date=\"A long, long time ago\"\n      details={[\n        'Destroyed the Death Star by using the force to find its only weakness and delivering a torpedo into the center of the ship',\n        'Commander of squadron of TIE-fighters into battle',\n        'Defeated an enemy AT-AT single handedly after his ship was destroyed',\n        'Awarded a medal for valor and bravery in battle for his successful destruction of the Death Star',\n      ]}\n      position=\"Lieutenant Commander\"\n    />\n    <ExperienceEntry\n      company=\"Tatooine Moisture Refinery\"\n      date=\"A long, long time ago\"\n      details={[\n        'Replaced damaged power convereters',\n        'Performed menial labor thoughout the farm in order to ensure its continued operation',\n      ]}\n      position=\"Mousture Farmer\"\n    />\n  </View>\n);\n\nconst resume = (\n  <Page size=\"A4\">\n    <Header />\n    <View style={styles.container}>\n      <View style={styles.leftColumn}>\n        <Image\n          src=\"https://images.gr-assets.com/characters/1264613782p8/1783.jpg\"\n          style={styles.image}\n        />\n        <Education />\n        <Skills />\n      </View>\n      <View style={styles.rightColumn}>\n        <Experience />\n      </View>\n    </View>\n    <Text style={styles.footer}>This IS the candidate you are looking for</Text>\n  </Page>\n);\n\nReactPDF.render(resume);\n"
  },
  {
    "path": "examples/styles.txt",
    "content": "const styles = StyleSheet.create({\n  page: { backgroundColor: 'tomato' },\n  section: { color: 'white', textAlign: 'center', margin: 30 }\n});\n\nconst doc = (\n  <Document>\n    <Page size=\"A4\" style={styles.page}>\n      <View style={styles.section}>\n        <Text>Section #1</Text>\n      </View>\n    </Page>\n  </Document>\n);\n\nReactPDF.render(doc);\n"
  },
  {
    "path": "examples/svg.txt",
    "content": "const styles = StyleSheet.create({\n  page: { padding: 60 },\n});\n\nconst Tiger = () => (\n  <Svg style={{ width: 400, height: 400 }}>\n    <G transform=\"scale(1) translate(100,10)\">\n      <Polygon\n        fill=\"#f2cc99\"\n        points=\" 69,18 82,8 99,3 118,5 135,12 149,21 156,13 165,9 177,13 183,28 180,50 164,91 155,107 154,114 151,121 141,127 139,136 155,206 157,251 126,342 133,357 128,376 83,376 75,368 67,350 61,350 53,369 4,369 2,361 5,354 12,342 16,321 4,257 4,244 7,218 9,179 26,127 43,93 32,77 30,70 24,67 16,49 17,35 18,23 30,12 40,7 53,7 62,12\"\n      />\n      <Polygon\n        fill=\"#e5b27f\"\n        points=\" 142,79 136,74 138,82 133,78 133,84 127,78 128,85 124,80 125,87 119,82 119,90 125,99 125,96 128,100 128,94 131,98 132,93 135,97 136,93 138,97 139,94 141,98 143,94 144,85\"\n      />\n      <Polygon fill=\"#eb8080\" points=\" 127,101 132,100 137,99 144,101 143,105 135,110\" />\n      <Polygon\n        fill=\"#f2cc99\"\n        points=\" 178,229 157,248 139,296 126,349 137,356 158,357 183,342 212,332 235,288 235,261 228,252 212,250 188,251\"\n      />\n      <G fill=\"#9c826b\">\n        <Polygon points=\" 56,229 48,241 48,250 57,281 63,325 71,338 81,315 76,321 79,311 83,301 75,308 80,298 73,303 76,296 71,298 74,292 69,293 74,284 78,278 71,278 74,274 68,273 70,268 66,267 68,261 60,266 62,259 65,253 57,258 59,251 55,254 55,248 60,237 54,240 58,234 54,236\" />\n        <Polygon points=\" 74,363 79,368 81,368 85,362 89,363 92,370 96,373 101,372 108,361 110,371 113,373 116,371 120,358 122,363 123,371 126,371 129,367 132,357 135,361 130,376 127,377 94,378 84,376 76,371\" />\n        <Polygon points=\" 212,250 219,251 228,258 236,270 235,287 225,304 205,332 177,343 171,352 158,357 166,352 168,346 168,339 165,333 155,327 155,323 161,320 165,316 169,316 167,312 171,313 168,308 173,309 170,306 177,306 175,308 177,311 174,311 176,316 171,315 174,319 168,320 168,323 175,327 179,332 183,326 184,332 189,323 190,328 194,320 194,325 199,316 201,320 204,313 206,316 208,310 211,305 219,298 226,288 229,279 228,266 224,259 217,253\" />\n        <Polygon points=\" 151,205 151,238 149,252 141,268 128,282 121,301 130,300 126,313 118,324 116,337 120,346 133,352 133,340 137,333 145,329 156,327 153,319 153,291 157,271 170,259 178,277 193,250 174,216\" />\n        <Polygon points=\" 78,127 90,142 95,155 108,164 125,167 139,175 150,206 152,191 141,140 121,148 100,136\" />\n        <Polygon points=\" 21,58 35,63 38,68 32,69 42,74 40,79 47,80 54,83 45,94 34,81 32,73 24,66\" />\n        <Polygon points=\" 71,34 67,34 66,27 59,24 54,17 48,17 39,22 30,26 28,31 31,39 38,46 29,45 36,54 41,61 41,70 50,69 54,71 55,58 67,52 76,43 76,39 68,44\" />\n        <Polygon points=\" 139,74 141,83 143,89 144,104 148,104 155,106 154,86 157,77 155,72 150,77 144,77\" />\n        <Polygon points=\" 105,44 102,53 108,58 111,62 112,55\" />\n        <Polygon points=\" 141,48 141,54 144,58 139,62 137,66 136,59 137,52\" />\n        <Polygon points=\" 98,135 104,130 105,134 108,132 108,135 112,134 113,137 116,136 116,139 119,139 124,141 128,140 133,138 140,133 139,140 126,146 104,144\" />\n        <Polygon points=\" 97,116 103,119 103,116 111,118 116,117 122,114 127,107 135,111 142,107 141,114 145,118 149,121 145,125 140,124 127,121 113,125 100,124\" />\n        <Polygon points=\" 147,33 152,35 157,34 153,31 160,31 156,28 161,28 159,24 163,25 163,21 165,22 170,23 167,17 172,21 174,18 175,23 176,22 177,28 177,33 174,37 176,39 174,44 171,49 168,53 164,57 159,68 156,70 154,60 150,51 146,43 144,35\" />\n        <Polygon points=\" 85,72 89,74 93,75 100,76 105,75 102,79 94,79 88,76\" />\n        <Polygon points=\" 86,214 79,221 76,232 82,225 78,239 82,234 78,245 81,243 79,255 84,250 84,267 87,254 90,271 90,257 95,271 93,256 95,249 92,252 93,243 89,253 89,241 86,250 87,236 83,245 87,231 82,231 90,219 84,221\" />\n      </G>\n      <G fill=\"#ffcc7f\">\n        <Polygon points=\" 93,68 96,72 100,73 106,72 108,66 105,63 100,62\" />\n        <Polygon points=\" 144,64 142,68 142,73 146,74 150,73 154,64 149,62\" />\n      </G>\n      <G fill=\"#9c826b\">\n        <Polygon points=\" 57,91 42,111 52,105 41,117 53,112 46,120 53,116 50,124 57,119 55,127 61,122 60,130 67,126 66,134 71,129 72,136 77,130 76,137 80,133 82,138 86,135 96,135 94,129 86,124 83,117 77,123 79,117 73,120 75,112 68,116 71,111 65,114 69,107 63,110 68,102 61,107 66,98 61,103 63,97 57,99\" />\n        <Polygon points=\" 83,79 76,79 67,82 75,83 65,88 76,87 65,92 76,91 68,96 77,95 70,99 80,98 72,104 80,102 76,108 85,103 92,101 87,98 93,96 86,94 91,93 85,91 93,89 99,89 105,93 107,85 102,82 92,80\" />\n        <Polygon points=\" 109,77 111,83 109,89 113,94 117,90 117,81 114,78\" />\n        <Polygon points=\" 122,128 127,126 134,127 136,129 134,130 130,128 124,129\" />\n        <Polygon points=\" 78,27 82,32 80,33 82,36 78,37 82,40 78,42 81,46 76,47 78,49 74,50 82,52 87,50 83,48 91,46 86,45 91,42 88,40 92,37 86,34 90,31 86,29 89,26\" />\n        <Polygon points=\" 82,17 92,20 79,21 90,25 81,25 94,28 93,26 101,30 101,26 107,33 108,28 111,40 113,34 115,45 117,39 119,54 121,46 124,58 126,47 129,59 130,49 134,58 133,44 137,48 133,37 137,40 133,32 126,20 135,26 132,19 138,23 135,17 142,18 132,11 116,6 94,6 78,11 92,12 80,14 90,16\" />\n        <Polygon points=\" 142,234 132,227 124,223 115,220 110,225 118,224 127,229 135,236 122,234 115,237 113,242 121,238 139,243 121,245 111,254 95,254 102,244 104,235 110,229 100,231 104,224 113,216 122,215 132,217 141,224 145,230 149,240\" />\n        <Polygon points=\" 115,252 125,248 137,249 143,258 134,255 125,254\" />\n        <Polygon points=\" 114,212 130,213 140,219 147,225 144,214 137,209 128,207\" />\n        <Polygon points=\" 102,263 108,258 117,257 131,258 116,260 109,265\" />\n        <Polygon points=\" 51,241 35,224 40,238 23,224 31,242 19,239 28,247 17,246 25,250 37,254 39,263 44,271 47,294 48,317 51,328 60,351 60,323 53,262 47,246\" />\n        <Polygon points=\" 2,364 9,367 14,366 18,355 20,364 26,366 31,357 35,364 39,364 42,357 47,363 53,360 59,357 54,369 7,373\" />\n        <Polygon points=\" 7,349 19,345 25,339 18,341 23,333 28,326 23,326 27,320 23,316 25,311 20,298 15,277 12,264 9,249 10,223 3,248 5,261 15,307 17,326 11,343\" />\n        <Polygon points=\" 11,226 15,231 25,236 18,227\" />\n        <Polygon points=\" 13,214 19,217 32,227 23,214 16,208 15,190 24,148 31,121 24,137 14,170 8,189\" />\n        <Polygon points=\" 202,254 195,258 199,260 193,263 197,263 190,268 196,268 191,273 188,282 200,272 194,272 201,266 197,265 204,262 200,258 204,256\" />\n      </G>\n      <G fill=\"#845433\">\n        <Polygon points=\" 151,213 165,212 179,225 189,246 187,262 179,275 176,263 177,247 171,233 163,230 165,251 157,264 146,298 145,321 133,326 143,285 154,260 153,240\" />\n        <Polygon points=\" 91,132 95,145 97,154 104,148 107,155 109,150 111,158 115,152 118,159 120,153 125,161 126,155 133,164 132,154 137,163 137,152 142,163 147,186 152,192 148,167 141,143 124,145 105,143\" />\n      </G>\n      <G fill=\"#9c826b\">\n        <Polygon points=\" 31,57 23,52 26,51 20,44 23,42 21,36 22,29 25,23 24,32 30,43 26,41 30,50 26,48\" />\n        <Polygon points=\" 147,21 149,28 155,21 161,16 167,14 175,15 173,11 161,9\" />\n        <Polygon points=\" 181,39 175,51 169,57 171,65 165,68 165,75 160,76 162,91 171,71 180,51\" />\n        <Polygon points=\" 132,346 139,348 141,346 142,341 147,342 143,355 133,350\" />\n        <Polygon points=\" 146,355 151,352 155,348 157,343 160,349 151,356 147,357\" />\n        <Polygon points=\" 99,266 100,281 94,305 86,322 78,332 72,346 73,331 91,291\" />\n        <Polygon points=\" 20,347 32,342 45,340 54,345 45,350 42,353 38,350 31,353 29,356 23,350 19,353 15,349\" />\n        <Polygon points=\" 78,344 86,344 92,349 88,358 84,352\" />\n        <Polygon points=\" 93,347 104,344 117,345 124,354 121,357 116,351 112,351 108,355 102,351\" />\n      </G>\n      <G fill=\"#000000\">\n        <Polygon points=\" 105,12 111,18 113,24 113,29 119,34 116,23 112,16\" />\n        <Polygon points=\" 122,27 125,34 127,43 128,34 125,29\" />\n        <Polygon points=\" 115,13 122,19 122,15 113,10\" />\n      </G>\n      <G fill=\"#ffe5b2\">\n        <Polygon points=\" 116,172 107,182 98,193 98,183 90,199 89,189 84,207 88,206 87,215 95,206 93,219 91,230 98,216 97,226 104,214 112,209 104,208 113,202 126,200 139,207 132,198 142,203 134,192 142,195 134,187 140,185 130,181 136,177 126,177 125,171 116,180\" />\n        <Polygon points=\" 74,220 67,230 67,221 59,235 63,233 60,248 70,232 65,249 71,243 67,256 73,250 69,262 73,259 71,267 76,262 72,271 78,270 76,275 82,274 78,290 86,279 86,289 92,274 88,275 87,264 82,270 82,258 77,257 78,247 73,246 77,233 72,236\" />\n        <Polygon points=\" 133,230 147,242 148,250 145,254 138,247 129,246 142,245 138,241 128,237 137,238\" />\n        <Polygon points=\" 133,261 125,261 116,263 111,267 125,265\" />\n        <Polygon points=\" 121,271 109,273 103,279 99,305 92,316 85,327 83,335 89,340 97,341 94,336 101,336 96,331 103,330 97,327 108,325 99,322 109,321 100,318 110,317 105,314 110,312 107,310 113,308 105,306 114,303 105,301 115,298 107,295 115,294 108,293 117,291 109,289 117,286 109,286 118,283 112,281 118,279 114,278 119,276 115,274\" />\n        <Polygon points=\" 79,364 74,359 74,353 76,347 80,351 83,356 82,360\" />\n        <Polygon points=\" 91,363 93,356 97,353 103,355 105,360 103,366 99,371 94,368\" />\n        <Polygon points=\" 110,355 114,353 118,357 117,363 113,369 111,362\" />\n        <Polygon points=\" 126,354 123,358 124,367 126,369 129,361 129,357\" />\n        <Polygon points=\" 30,154 24,166 20,182 23,194 29,208 37,218 41,210 41,223 46,214 46,227 52,216 52,227 61,216 59,225 68,213 73,219 70,207 77,212 69,200 77,202 70,194 78,197 68,187 76,182 64,182 58,175 58,185 53,177 50,186 46,171 44,182 39,167 36,172 36,162 30,166\" />\n        <Polygon points=\" 44,130 41,137 45,136 43,150 48,142 48,157 53,150 52,164 60,156 61,169 64,165 66,175 70,167 74,176 77,168 80,183 85,172 90,182 93,174 98,181 99,173 104,175 105,169 114,168 102,163 95,157 94,166 90,154 87,162 82,149 75,159 72,148 68,155 67,143 62,148 62,138 58,145 56,133 52,142 52,128 49,134 47,125\" />\n        <Polygon points=\" 13,216 19,219 36,231 22,223 16,222 22,227 12,224 13,220 16,220\" />\n        <Polygon points=\" 10,231 14,236 25,239 27,237 19,234\" />\n        <Polygon points=\" 9,245 14,242 25,245 13,245\" />\n        <Polygon points=\" 33,255 26,253 18,254 25,256 18,258 27,260 18,263 27,265 19,267 29,270 21,272 29,276 21,278 30,281 22,283 31,287 24,288 32,292 23,293 34,298 26,299 37,303 32,305 39,309 33,309 39,314 34,314 40,318 34,317 40,321 34,321 41,326 33,326 40,330 33,332 39,333 33,337 42,337 54,341 49,337 52,335 47,330 50,330 45,325 49,325 45,321 48,321 45,316 46,306 45,286 43,274 36,261\" />\n        <Polygon points=\" 7,358 9,351 14,351 17,359 11,364\" />\n        <Polygon points=\" 44,354 49,351 52,355 49,361\" />\n        <Polygon points=\" 32,357 37,353 40,358 36,361\" />\n        <Polygon points=\" 139,334 145,330 154,330 158,334 154,341 152,348 145,350 149,340 147,336 141,339 139,345 136,342 136,339\" />\n        <Polygon points=\" 208,259 215,259 212,255 220,259 224,263 225,274 224,283 220,292 208,300 206,308 203,304 199,315 197,309 195,318 193,313 190,322 190,316 185,325 182,318 180,325 172,321 178,320 176,313 186,312 180,307 188,307 184,303 191,302 186,299 195,294 187,290 197,288 192,286 201,283 194,280 203,277 198,275 207,271 200,269 209,265 204,265 212,262\" />\n        <Polygon points=\" 106,126 106,131 109,132 111,134 115,132 115,135 119,133 118,137 123,137 128,137 133,134 136,130 136,127 132,124 118,128 112,128 106,126 106,126 106,126\" />\n        <Polygon points=\" 107,114 101,110 98,102 105,97 111,98 119,102 121,108 118,112 113,115\" />\n        <Polygon points=\" 148,106 145,110 146,116 150,118 152,111 151,107\" />\n        <Polygon points=\" 80,55 70,52 75,58 63,57 72,61 57,61 67,66 57,67 62,69 54,71 61,73 54,77 63,78 53,85 60,84 56,90 69,84 63,82 75,76 70,75 77,72 72,71 78,69 72,66 81,67 78,64 82,63 80,60 86,62\" />\n        <Polygon points=\" 87,56 91,52 96,50 102,56 98,56 92,60\" />\n        <Polygon points=\" 85,68 89,73 98,76 106,74 96,73 91,70\" />\n        <Polygon points=\" 115,57 114,64 111,64 115,75 122,81 122,74 126,79 126,74 131,78 130,72 133,77 131,68 126,61 119,57\" />\n        <Polygon points=\" 145,48 143,53 147,59 151,59 150,55\" />\n        <Polygon points=\" 26,22 34,15 43,10 52,10 59,16 47,15 32,22\" />\n        <Polygon points=\" 160,19 152,26 149,34 154,33 152,30 157,30 155,26 158,27 157,23 161,23\" />\n      </G>\n      <G>\n        <Polygon fill=\"#000000\" points=\" 98,117 105,122 109,122 105,117 113,120 121,120 130,112 128,108 123,103 123,99 128,101 132,106 135,109 142,105 142,101 145,101 145,91 148,101 145,105 136,112 135,116 143,124 148,120 150,122 142,128 133,122 121,125 112,126 103,125 100,129 96,124\" />\n        <Polygon fill=\"#000000\" points=\" 146,118 152,118 152,115 149,115\" />\n        <Polygon fill=\"#000000\" points=\" 148,112 154,111 154,109 149,109\" />\n        <Polygon fill=\"#000000\" points=\" 106,112 108,115 114,116 118,114\" />\n        <Polygon fill=\"#000000\" points=\" 108,108 111,110 116,110 119,108\" />\n        <Polygon fill=\"#000000\" points=\" 106,104 109,105 117,106 115,104\" />\n        <Polygon fill=\"#000000\" points=\" 50,25 41,26 34,33 39,43 49,58 36,51 47,68 55,69 54,59 61,57 74,46 60,52 67,42 57,48 61,40 54,45 60,36 59,29 48,38 52,30 47,32\" />\n        <Polygon fill=\"#000000\" points=\" 147,34 152,41 155,49 161,53 157,47 164,47 158,43 168,44 159,40 164,37 169,37 164,33 169,34 165,28 170,30 170,25 173,29 175,27 176,32 173,36 175,39 172,42 172,46 168,49 170,55 162,57 158,63 155,58 153,50 149,46\" />\n        <Polygon fill=\"#000000\" points=\" 155,71 159,80 157,93 157,102 155,108 150,101 149,93 154,101 152,91 151,83 155,79\" />\n        <Polygon fill=\"#000000\" points=\" 112,78 115,81 114,91 112,87 113,82\" />\n        <Polygon fill=\"#000000\" points=\" 78,28 64,17 58,11 47,9 36,10 28,16 21,26 18,41 20,51 23,61 33,65 28,68 37,74 36,81 43,87 48,90 43,100 40,98 39,90 31,80 30,72 22,71 17,61 14,46 16,28 23,17 33,9 45,6 54,6 65,12\" />\n        <Polygon fill=\"#000000\" points=\" 67,18 76,9 87,5 101,2 118,3 135,8 149,20 149,26 144,19 132,12 121,9 105,7 89,8 76,14 70,20\" />\n        <Polygon fill=\"#000000\" points=\" 56,98 48,106 56,103 47,112 56,110 52,115 57,113 52,121 62,115 58,123 65,119 63,125 69,121 68,127 74,125 74,129 79,128 83,132 94,135 93,129 85,127 81,122 76,126 75,121 71,124 71,117 66,121 66,117 62,117 64,112 60,113 60,110 57,111 61,105 57,107 60,101 55,102\" />\n        <Polygon fill=\"#000000\" points=\" 101,132 103,138 106,134 106,139 112,136 111,142 115,139 114,143 119,142 125,145 131,142 135,138 140,134 140,129 143,135 145,149 150,171 149,184 145,165 141,150 136,147 132,151 131,149 126,152 125,150 121,152 117,148 111,152 110,148 105,149 104,145 98,150 96,138 94,132 94,130 98,132\" />\n        <Polygon fill=\"#000000\" points=\" 41,94 32,110 23,132 12,163 6,190 7,217 5,236 3,247 9,230 12,211 12,185 18,160 26,134 35,110 43,99\" />\n        <Polygon fill=\"#000000\" points=\" 32,246 41,250 50,257 52,267 53,295 53,323 59,350 54,363 51,365 44,366 42,360 40,372 54,372 59,366 62,353 71,352 75,335 73,330 66,318 68,302 64,294 67,288 63,286 63,279 59,275 58,267 56,262 50,247 42,235 44,246 32,236 35,244\" />\n        <Polygon fill=\"#000000\" points=\" 134,324 146,320 159,322 173,327 179,337 179,349 172,355 158,357 170,350 174,343 170,333 163,328 152,326 134,329\" />\n        <Polygon fill=\"#000000\" points=\" 173,339 183,334 184,338 191,329 194,332 199,323 202,325 206,318 209,320 213,309 221,303 228,296 232,289 234,279 233,269 230,262 225,256 219,253 208,252 198,252 210,249 223,250 232,257 237,265 238,277 238,291 232,305 221,323 218,335 212,342 200,349 178,348\" />\n        <Polygon fill=\"#000000\" points=\" 165,296 158,301 156,310 156,323 162,324 159,318 162,308 162,304\" />\n        <Polygon fill=\"#000000\" points=\" 99,252 105,244 107,234 115,228 121,228 131,235 122,233 113,235 109,246 121,239 133,243 121,243 110,251\" />\n        <Polygon fill=\"#000000\" points=\" 117,252 124,247 134,249 136,253 126,252\" />\n        <Polygon fill=\"#000000\" points=\" 117,218 132,224 144,233 140,225 132,219 117,218 117,218 117,218\" />\n        <Polygon fill=\"#000000\" points=\" 122,212 134,214 143,221 141,213 132,210\" />\n        <Polygon fill=\"#000000\" points=\" 69,352 70,363 76,373 86,378 97,379 108,379 120,377 128,378 132,373 135,361 133,358 132,366 127,375 121,374 121,362 119,367 117,374 110,376 110,362 107,357 106,371 104,375 97,376 90,375 90,368 86,362 83,364 86,369 85,373 78,370 73,362 71,351\" />\n        <Polygon fill=\"#000000\" points=\" 100,360 96,363 99,369 102,364\" />\n        <Polygon fill=\"#000000\" points=\" 115,360 112,363 114,369 117,364\" />\n        <Polygon fill=\"#000000\" points=\" 127,362 125,364 126,369 128,365\" />\n        <Polygon fill=\"#000000\" points=\" 5,255 7,276 11,304 15,320 13,334 6,348 2,353 0,363 5,372 12,374 25,372 38,372 44,369 42,367 36,368 31,369 30,360 27,368 20,370 16,361 15,368 10,369 3,366 3,359 6,352 11,348 17,331 19,316 12,291 9,274\" />\n        <Polygon fill=\"#000000\" points=\" 10,358 7,362 10,366 11,362\" />\n        <Polygon fill=\"#000000\" points=\" 25,357 22,360 24,366 27,360\" />\n        <Polygon fill=\"#000000\" points=\" 37,357 34,361 36,365 38,361\" />\n        <Polygon fill=\"#000000\" points=\" 49,356 46,359 47,364 50,360\" />\n        <Polygon fill=\"#000000\" points=\" 130,101 132,102 135,101 139,102 143,103 142,101 137,100 133,100\" />\n        <Polygon fill=\"#000000\" points=\" 106,48 105,52 108,56 109,52\" />\n        <Polygon fill=\"#000000\" points=\" 139,52 139,56 140,60 142,58 141,56\" />\n        <Polygon fill=\"#000000\" points=\" 25,349 29,351 30,355 33,350 37,348 42,351 45,347 49,345 44,343 36,345\" />\n        <Polygon fill=\"#000000\" points=\" 98,347 105,351 107,354 109,349 115,349 120,353 118,349 113,346 104,346\" />\n        <Polygon fill=\"#000000\" points=\" 83,348 87,352 87,357 89,351 87,348\" />\n        <Polygon fill=\"#000000\" points=\" 155,107 163,107 170,107 186,108 175,109 155,109\" />\n        <Polygon fill=\"#000000\" points=\" 153,114 162,113 175,112 192,114 173,114 154,115\" />\n        <Polygon fill=\"#000000\" points=\" 152,118 164,120 180,123 197,129 169,123 151,120\" />\n        <Polygon fill=\"#000000\" points=\" 68,109 87,106 107,106 106,108 88,108\" />\n        <Polygon fill=\"#000000\" points=\" 105,111 95,112 79,114 71,116 85,115 102,113\" />\n        <Polygon fill=\"#000000\" points=\" 108,101 98,99 87,99 78,99 93,100 105,102\" />\n        <Polygon fill=\"#000000\" points=\" 85,63 91,63 97,60 104,60 108,62 111,69 112,75 110,74 108,71 103,73 106,69 105,65 103,64 103,67 102,70 99,70 97,66 94,67 97,72 88,67 84,66\" />\n        <Polygon fill=\"#000000\" points=\" 140,74 141,66 144,61 150,61 156,62 153,70 150,73 152,65 150,65 151,68 149,71 146,71 144,66 143,70 143,74\" />\n        <Polygon fill=\"#000000\" points=\" 146,20 156,11 163,9 172,9 178,14 182,18 184,32 182,42 182,52 177,58 176,67 171,76 165,90 157,105 160,92 164,85 168,78 167,73 173,66 172,62 175,59 174,55 177,53 180,46 181,29 179,21 173,13 166,11 159,13 153,18 148,23\" />\n        <Polygon fill=\"#000000\" points=\" 150,187 148,211 150,233 153,247 148,267 135,283 125,299 136,292 131,313 122,328 122,345 129,352 133,359 133,367 137,359 148,356 140,350 131,347 129,340 132,332 140,328 137,322 140,304 154,265 157,244 155,223 161,220 175,229 186,247 185,260 176,275 178,287 185,277 188,261 196,253 189,236 174,213\" />\n        <Polygon fill=\"#000000\" points=\" 147,338 142,341 143,345 141,354 147,343\" />\n        <Polygon fill=\"#000000\" points=\" 157,342 156,349 150,356 157,353 163,346 162,342\" />\n        <Polygon fill=\"#000000\" points=\" 99,265 96,284 92,299 73,339 73,333 87,300\" />\n      </G>\n    </G>\n  </Svg>\n)\n\nconst doc = (\n  <Document>\n    <Page style={styles.page} size=\"A4\">\n      <Tiger />\n    </Page>\n  </Document>\n);\n\nReactPDF.render(doc);\n"
  },
  {
    "path": "examples/svgtext.txt",
    "content": "const styles = StyleSheet.create({\n  page: { padding: 60 },\n});\n\nconst doc = (\n  <Document>\n    <Page style={styles.page} size=\"A4\">\n      <Svg viewBox=\"0 0 240 40\">\n        <Text x=\"10\" y=\"30\">\n          React-pdf is cool\n        </Text>\n      </Svg>\n    </Page>\n  </Document>\n);\n\nReactPDF.render(doc);\n"
  },
  {
    "path": "examples/text.txt",
    "content": "const styles = StyleSheet.create({\n  title: {\n    margin: 20,\n    fontSize: 25,\n    textAlign: 'center',\n    backgroundColor: '#e4e4e4',\n    textDecoration: 'underline',\n    textTransform: 'uppercase',\n  },\n  body: {\n    flexGrow: 1,\n  },\n  row: {\n    flexGrow: 1,\n    flexDirection: 'row',\n  },\n  block: {\n    flexGrow: 1,\n  },\n  text: {\n    flexGrow: 3,\n    margin: 10,\n  },\n  fill1: {\n    flexGrow: 2,\n    backgroundColor: '#e14427',\n  },\n  fill2: {\n    flexGrow: 2,\n    backgroundColor: '#e6672d',\n  },\n  fill3: {\n    flexGrow: 2,\n    backgroundColor: '#e78632',\n  },\n  fill4: {\n    flexGrow: 2,\n    backgroundColor: '#e29e37',\n  },\n});\n\n\nconst doc = (\n  <Document>\n    <Page size=\"A4\">\n      <Link\n        style={styles.title}\n        src=\"https://es.wikipedia.org/wiki/Lorem_ipsum\"\n      >\n        Lorem Ipsum\n      </Link>\n      <View style={styles.body}>\n        <View style={styles.row}>\n          <Text style={styles.text}>\n            Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do\n            eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim\n            ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut\n            aliquip ex ea commodo consequat. Duis aute irure dolor in\n            reprehenderit in voluptate velit esse cillum.\n          </Text>\n          <View style={styles.fill1} />\n        </View>\n        <View style={styles.row}>\n          <View style={styles.fill2} />\n          <Text style={styles.text}>\n            Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do\n            eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim\n            ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut\n            aliquip ex ea commodo consequat. Duis aute irure dolor in\n            reprehenderit in voluptate velit esse cillum.\n          </Text>\n        </View>\n        <View style={styles.row}>\n          <Text style={styles.text}>\n            Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do\n            eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim\n            ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut\n            aliquip ex ea commodo consequat. Duis aute irure dolor in\n            reprehenderit in voluptate velit esse cillum.\n          </Text>\n          <View style={styles.fill3} />\n        </View>\n        <View style={styles.row}>\n          <View style={styles.fill4} />\n          <Text style={styles.text}>\n            Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do\n            eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim\n            ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut\n            aliquip ex ea commodo consequat. Duis aute irure dolor in\n            reprehenderit in voluptate velit esse cillum.\n          </Text>\n        </View>\n      </View>\n    </Page>\n  </Document>\n);\n\nReactPDF.render(doc);\n"
  },
  {
    "path": "examples/textinput.txt",
    "content": "const UserInformation = () => (\n  <View>\n    <Text style={styles.heading}>User Information</Text>\n    <View style={styles.verticalFlex}>\n      <View style={styles.flexGrow}>\n        <Text>Username</Text>\n        <TextInput\n          name=\"username\"\n          required\n          noSpell\n          style={styles.textinput}/>\n        <Text>Age</Text>\n        <TextInput\n          name=\"age\"\n          value=\"18\"\n          defaultValue=\"18\"\n          align=\"center\"\n          required\n          style={styles.textinput}/>\n        <Text>Region</Text>\n        <TextInput\n          name=\"region\"\n          value=\"Europe\"\n          align=\"center\"\n          readOnly\n          style={styles.textinput}/>\n      </View>\n      <View style={styles.flexGrow}>\n        <Text>First name</Text>\n        <TextInput\n          name=\"firstname\"\n          required\n          style={styles.textinput}/>\n        <Text>Second name</Text>\n        <TextInput\n          name=\"secondname\"\n          style={styles.textinput}/>\n        <Text>Last name</Text>\n        <TextInput\n          name=\"lastname\"\n          required\n          style={styles.textinput}/>\n      </View>\n    </View>\n    <Text>Description</Text>\n    <TextInput\n      name=\"description\"\n      multiline\n      style={[styles.textinput, styles.multiline]}/>\n  </View>\n);\n\nconst styles = StyleSheet.create({\n  page: {\n    padding: 60\n  },\n  heading: {\n    fontSize: 24,\n    textAlign: 'center',\n    marginBottom: 40\n  },\n  textinput: {\n    height: 14.4,\n    marginRight: 50,\n    marginTop: 10,\n    marginBottom: 20\n  },\n  multiline: {\n    height: 72\n  },\n  verticalFlex: {\n    display: 'flex',\n    flexDirection: 'row',\n    justifyContent: 'space-around'\n  },\n  flexGrow: {\n    flexGrow: 1\n  }\n});\n\nconst doc = (\n  <Document>\n    <Page style={styles.page} size=\"A4\">\n      <UserInformation />\n    </Page>\n  </Document>\n);\n\nReactPDF.render(doc);"
  },
  {
    "path": "next.config.js",
    "content": "module.exports = {\n  swcMinify: false,\n  webpack: (config, options) => {\n    config.module.rules.push({\n      test: /\\.md/,\n      use: [options.defaultLoaders.babel, '@mdx-js/loader'],\n    });\n\n    config.module.rules.push({\n      test: /\\.worker\\.(min\\.)?js$/,\n      loader: 'file-loader',\n      options: {\n        name: '[contenthash].[ext]',\n        publicPath: '_next/static/worker',\n        outputPath: 'static/worker',\n      },\n    });\n\n    config.resolve.alias.canvas = false;\n\n    return config;\n  },\n};\n"
  },
  {
    "path": "next.config_old.js",
    "content": "module.exports = {\n  webpack: (config, options) => {\n    config.module.rules.push({\n      test: /\\.md/,\n      use: [options.defaultLoaders.babel, '@mdx-js/loader'],\n    });\n\n    config.module.rules.push({\n      test: /\\.worker\\.js$/,\n      loader: 'worker-loader',\n      // options: { inline: true }, // also works\n      options: {\n        name: '[hash].worker.js',\n        publicPath: '/_next/',\n      },\n    });\n\n    return config;\n  },\n};\n"
  },
  {
    "path": "now.json",
    "content": "{\n  \"name\": \"@react-pdf/site\",\n  \"version\": 2\n}\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"@react-pdf/site\",\n  \"version\": \"1.0.0\",\n  \"license\": \"MIT\",\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"next\",\n    \"build\": \"next build\",\n    \"start\": \"next start\",\n    \"deploy\": \"now --public\"\n  },\n  \"dependencies\": {\n    \"@emotion/core\": \"^10.0.35\",\n    \"@emotion/styled\": \"^10.0.27\",\n    \"@fortawesome/fontawesome-svg-core\": \"^1.2.35\",\n    \"@fortawesome/free-brands-svg-icons\": \"^5.15.3\",\n    \"@fortawesome/free-solid-svg-icons\": \"^5.15.3\",\n    \"@fortawesome/react-fontawesome\": \"^0.1.14\",\n    \"@mdx-js/loader\": \"^1.5.1\",\n    \"@next/mdx\": \"^9.1.1\",\n    \"@react-pdf/math\": \"^1.0.1\",\n    \"@react-pdf/renderer\": \"^4.4.0\",\n    \"@vercel/analytics\": \"^1.1.1\",\n    \"add\": \"^2.0.6\",\n    \"buble\": \"^0.19.3\",\n    \"codemirror\": \"^5.45.0\",\n    \"date-fns\": \"^2.19.0\",\n    \"dotenv\": \"^6.0.0\",\n    \"emotion\": \"^10.0.27\",\n    \"emotion-server\": \"^10.0.27\",\n    \"emotion-theming\": \"^10.0.27\",\n    \"extract-text-webpack-plugin\": \"^4.0.0-beta.0\",\n    \"lodash.debounce\": \"^4.0.8\",\n    \"lz-string\": \"^1.4.4\",\n    \"next\": \"^14.2.15\",\n    \"prismjs\": \"^1.30.0\",\n    \"prop-types\": \"^15.6.2\",\n    \"react\": \"^18.2.0\",\n    \"react-copy-to-clipboard\": \"^5.0.1\",\n    \"react-dom\": \"^18.2.0\",\n    \"react-ga\": \"^2.5.3\",\n    \"react-pdf\": \"^9.2.1\",\n    \"react-prism\": \"^4.3.2\",\n    \"react-tippy\": \"^1.2.2\",\n    \"react-use\": \"^15.3.4\",\n    \"recompose\": \"^0.30.0\",\n    \"worker-loader\": \"^3.0.1\"\n  },\n  \"devDependencies\": {\n    \"babel-plugin-prismjs\": \"^1.0.2\",\n    \"babel-plugin-transform-define\": \"^1.3.0\",\n    \"raw-loader\": \"^0.5.1\"\n  },\n  \"packageManager\": \"yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e\"\n}\n"
  },
  {
    "path": "pages/_app.js",
    "content": "import React from 'react';\nimport { MDXProvider } from '@mdx-js/react';\nimport { Analytics } from '@vercel/analytics/react';\nimport { ThemeProvider } from 'emotion-theming';\nimport Head from 'next/head';\n\nimport theme from '../src/styled/theme';\nimport components from '../src/lib/markdown';\n\n// Global styles\nrequire('react-tippy/dist/tippy.css');\nrequire('react-pdf/dist/Page/AnnotationLayer.css');\nrequire('react-pdf/dist/Page/TextLayer.css');\n\nrequire('../public/styles/index.css');\nrequire('../public/styles/fonts.css');\nrequire('../public/styles/prism.css');\nrequire('../public/styles/tooltips.css');\nrequire('../public/styles/codemirror.css');\n\nimport App from 'next/app';\n\nclass MyApp extends App {\n  render() {\n    const { Component, pageProps, router } = this.props;\n\n    return (\n      <>\n        <Head>\n          <title>React-pdf</title>\n          <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n        </Head>\n\n        <MDXProvider components={components}>\n          <ThemeProvider theme={theme}>\n            <Component {...pageProps} />\n          </ThemeProvider>\n        </MDXProvider>\n\n        <Analytics />\n      </>\n    );\n  }\n}\n\nexport default MyApp;\n"
  },
  {
    "path": "pages/_document.js",
    "content": "import { extractCritical } from 'emotion-server'\nimport Document, { Html, Head, Main, NextScript } from 'next/document';\n\n\nclass MyDocument extends Document {\n  static async getInitialProps(ctx) {\n    const initialProps = await Document.getInitialProps(ctx)\n    const styles = extractCritical(initialProps.html)\n    return {\n      ...initialProps,\n      styles: (\n        <>\n          {initialProps.styles}\n          <style\n            data-emotion-css={styles.ids.join(' ')}\n            dangerouslySetInnerHTML={{ __html: styles.css }}\n          />\n        </>\n      ),\n    }\n  }\n\n  render() {\n    return (\n      <Html>\n        <Head>\n          <link\n            rel=\"stylesheet\"\n            href=\"https://unpkg.com/codemirror@5.39.2/lib/codemirror.css\"\n          />\n          <link rel=\"stylesheet\" href=\"/_next/static/style.css\" />\n          <link\n            rel=\"apple-touch-icon\"\n            sizes=\"180x180\"\n            href=\"/favicons/apple-touch-icon.png?v=qABAGbMGwd\"\n          />\n          <link\n            rel=\"icon\"\n            type=\"image/png\"\n            sizes=\"32x32\"\n            href=\"/favicons/favicon-32x32.png?v=qABAGbMGwd\"\n          />\n          <link\n            rel=\"icon\"\n            type=\"image/png\"\n            sizes=\"16x16\"\n            href=\"/favicons/favicon-16x16.png?v=qABAGbMGwd\"\n          />\n          <link rel=\"manifest\" href=\"/favicons/site.webmanifest?v=qABAGbMGwd\" />\n          <link\n            rel=\"mask-icon\"\n            href=\"/favicons/safari-pinned-tab.svg?v=qABAGbMGwd\"\n            color=\"#8d1602\"\n          />\n          <link rel=\"shortcut icon\" href=\"/favicons/favicon.ico?v=qABAGbMGwd\" />\n          <meta name=\"msapplication-TileColor\" content=\"#fafafa\" />\n          <meta\n            name=\"msapplication-config\"\n            content=\"/favicons/browserconfig.xml?v=qABAGbMGwd\"\n          />\n          <meta name=\"theme-color\" content=\"#ffffff\" />\n\n\n          {/* OG Tags */}\n          <meta property=\"og:title\" content=\"React-pdf\" />\n          <meta\n            property=\"og:description\"\n            content=\"React renderer for creating PDF files on the browser and server\"\n          />\n          <meta property=\"og:image\" content=\"/images/og-banner.png\" />\n          <meta property=\"og:image:width\" content=\"950\" />\n          <meta property=\"og:image:height\" content=\"650\" />\n          <meta property=\"og:url\" content=\"http://react-pdf.org\" />\n        </Head>\n\n        <body>\n          <Main />\n          <NextScript />\n        </body>\n      </Html>\n    );\n  }\n}\n\nexport default MyDocument;\n"
  },
  {
    "path": "pages/advanced.js",
    "content": "import React from 'react';\n\nimport Layout from '../src/components/Layout';\nimport Advanced from '../docs/advanced.md';\n\nconst AdvancedPage = () => {\n  return (\n    <Layout>\n      <Advanced />\n    </Layout>\n  );\n};\n\nexport default AdvancedPage;\n"
  },
  {
    "path": "pages/blog/[slug].js",
    "content": "import React from 'react';\nimport Head from 'next/head';\nimport styled from '@emotion/styled';\nimport { parse, format } from 'date-fns';\n\nimport media from '../../src/styled/media';\nimport Icon from '../../src/components/UI/Icon';\nimport Link from '../../src/components/UI/Link';\nimport { H1 } from '../../src/components/UI/Heading';\nimport * as Announcing20 from '../../blog/announcing-react-pdf-v2.md';\n\nconst BLOG_POSTS = {\n  'announcing-react-pdf-v2': Announcing20,\n};\n\nconst Main = styled.main`\n  display: flex;\n  min-height: 100%;\n\n  h1,\n  h2,\n  h3,\n  h4 {\n    font-weight: 400 !important;\n  }\n\n  h2 {\n    margin-top: 70px;\n  }\n\n  ul,\n  li {\n    column-count: 1;\n  }\n`;\n\nconst Section = styled.article`\n  flex: 1;\n  width: 100%;\n  margin: 0 auto;\n  padding: 110px;\n  max-width: 1100px;\n  overflow-y: ${(props) => props.menuOpened && 'hidden'};\n\n  ${media.tablet} {\n    padding: 4em;\n  }\n\n  ${media.phone} {\n    padding: 1.5em;\n    padding-bottom: 3em;\n  }\n`;\n\nconst Back = styled(Link)`\n  display: block;\n  font-size: 16px;\n  margin-bottom: 80px;\n  color: ${(props) => props.theme.gray1};\n\n  span {\n    margin-left: 5px;\n  }\n`;\n\nconst CornerGraphicsImage = styled.img`\n  top: 0;\n  right: 0;\n  width: 15%;\n  position: absolute;\n  pointer-events: none;\n\n  ${media.phone} {\n    display: none;\n  }\n`;\n\nconst Metadata = styled.div`\n  margin-bottom: 60px;\n  color: ${(props) => props.theme.gray1};\n`;\n\nconst Separator = styled.span`\n  margin: 0 10px;\n`;\n\nconst Profile = styled.a`\n  text-decoration: none;\n  transition: 0.3s linear all;\n  color: ${(props) => props.theme.gray1};\n\n  &:hover {\n    color: ${(props) => props.theme.red};\n  }\n`;\n\nconst parseDate = (value) => {\n  const d = parse(value, 'MM/dd/yyyy', new Date());\n  return format(d, 'MMMM do, yyyy');\n};\n\nconst Blog = ({ slug }) => {\n  const Post = BLOG_POSTS[slug];\n  const metadata = Post.metadata;\n  const title = `React-pdf - ${metadata.title}`;\n  const image = metadata.image?.url || '/images/og-banner.png';\n\n  return (\n    <Main>\n      <Head>\n        <title>{title}</title>\n\n        <link rel=\"stylesheet\" href=\"/_next/static/style.css\" />\n        <link\n          rel=\"apple-touch-icon\"\n          sizes=\"180x180\"\n          href=\"/favicons/apple-touch-icon.png?v=qABAGbMGwd\"\n        />\n        <link\n          rel=\"icon\"\n          type=\"image/png\"\n          sizes=\"32x32\"\n          href=\"/favicons/favicon-32x32.png?v=qABAGbMGwd\"\n        />\n        <link\n          rel=\"icon\"\n          type=\"image/png\"\n          sizes=\"16x16\"\n          href=\"/favicons/favicon-16x16.png?v=qABAGbMGwd\"\n        />\n        <link rel=\"manifest\" href=\"/favicons/site.webmanifest?v=qABAGbMGwd\" />\n        <link\n          rel=\"mask-icon\"\n          href=\"/favicons/safari-pinned-tab.svg?v=qABAGbMGwd\"\n          color=\"#8d1602\"\n        />\n        <link rel=\"shortcut icon\" href=\"/favicons/favicon.ico?v=qABAGbMGwd\" />\n        <meta name=\"msapplication-TileColor\" content=\"#fafafa\" />\n        <meta\n          name=\"msapplication-config\"\n          content=\"/favicons/browserconfig.xml?v=qABAGbMGwd\"\n        />\n        <meta name=\"theme-color\" content=\"#ffffff\" />\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\n        {/* OG Tags */}\n        <meta property=\"og:title\" content={title} />\n        <meta\n          property=\"og:description\"\n          content=\"React renderer for creating PDF files on the browser and server\"\n        />\n        <meta\n          property=\"og:image\"\n          content={image}\n        />\n        <meta\n          property=\"og:image:width\"\n          content={metadata.image?.width || '950'}\n        />\n        <meta\n          property=\"og:image:height\"\n          content={metadata.image?.height || '650'}\n        />\n        <meta property=\"og:url\" content=\"http://react-pdf.org\" />\n\n        <meta name=\"twitter:card\" content=\"summary_large_image\" />\n        <meta name=\"twitter:title\" content={title} />\n        <meta\n          name=\"twitter:description\"\n          content=\"React renderer for creating PDF files on the browser and server\"\n        />\n        <meta name=\"twitter:url\" content={`https://react-pdf.org/blog/${slug}`} />\n        <meta name=\"twitter:image\" content={`https://react-pdf.org${image}`} />\n        <meta name=\"twitter:label1\" content=\"Written by\" />\n        <meta name=\"twitter:data1\" content={metadata.author} />\n        <meta name=\"twitter:creator\" content={metadata.author} />\n      </Head>\n\n      <Section>\n        <Back href=\"/\">\n          <Icon type=\"arrow-left\" />\n          <span>Go to Site</span>\n        </Back>\n        <H1>{metadata?.title}</H1>\n\n        <Metadata>\n          <span>By </span>\n\n          <Profile\n            href={`https://github.com/${metadata.author}`}\n            target=\"__blank\"\n          >\n            @{metadata.author}\n          </Profile>\n\n          <Separator>|</Separator>\n\n          <span>{parseDate(metadata.date)}</span>\n        </Metadata>\n\n        <Post.default />\n\n        <CornerGraphicsImage src=\"/images/corner-graphics.png\" />\n      </Section>\n    </Main>\n  );\n};\n\nexport async function getServerSideProps(context) {\n  const slug = context.query.slug;\n  const postExists = !!BLOG_POSTS[slug];\n\n  if (!postExists) {\n    context.res.statusCode = 302;\n    context.res.setHeader('Location', `/404`);\n    return { props: {} };\n  }\n\n  return { props: { slug } };\n}\n\nexport default Blog;\n"
  },
  {
    "path": "pages/compatibility.js",
    "content": "import React from 'react';\n\nimport Layout from '../src/components/Layout';\nimport Compatibility from '../docs/compatibility.md'\n\nconst RenderingProcessPage = () => {\n  return (\n    <Layout>\n      <Compatibility />\n    </Layout>\n  );\n};\n\nexport default RenderingProcessPage;\n"
  },
  {
    "path": "pages/components.js",
    "content": "import React from 'react';\n\nimport Layout from '../src/components/Layout';\nimport Components from '../docs/components.md';\n\nconst ComponentsPage = () => {\n  return (\n    <Layout>\n      <Components />\n    </Layout>\n  );\n};\n\nexport default ComponentsPage;\n"
  },
  {
    "path": "pages/fonts.js",
    "content": "\nimport React from 'react';\n\nimport Fonts from '../docs/fonts.md'\nimport Layout from '../src/components/Layout';\n\nconst FontsPage = () => {\n  return (\n    <Layout>\n      <Fonts />\n    </Layout>\n  );\n};\n\nexport default FontsPage;\n"
  },
  {
    "path": "pages/form.js",
    "content": "import React from \"react\";\n\nimport FORM from \"../docs/form.md\";\nimport Layout from \"../src/components/Layout\";\n\nconst FORMPage = () => {\n\treturn (\n\t\t<Layout>\n\t\t\t<FORM />\n\t\t</Layout>\n\t);\n};\n\nexport default FORMPage;\n"
  },
  {
    "path": "pages/hooks.js",
    "content": "\nimport React from 'react';\n\nimport Hooks from '../docs/hooks.md'\nimport Layout from '../src/components/Layout';\n\nconst HooksPage = () => {\n  return (\n    <Layout>\n      <Hooks />\n    </Layout>\n  );\n};\n\nexport default HooksPage;\n"
  },
  {
    "path": "pages/index.js",
    "content": "import React from 'react';\nimport Link from 'next/link';\nimport styled from '@emotion/styled';\nimport dynamic from 'next/dynamic';\n\nimport media from '../src/styled/media';\nimport Logo from '../src/components/UI/Logo';\nimport Layout from '../src/components/Layout';\nimport Title from '../src/components/UI/Title';\nimport Button from '../src/components/UI/Button';\nimport EditButton from '../src/components/Docs/EditButton';\n\nconst Content = dynamic(() => import('../docs/quick-start.md'), { ssr: false });\n\nconst DocumentGraphicImage = styled.img`\n  margin: 50px;\n  width: 210px;\n\n  ${media.phone} {\n    width: 130px;\n    margin: 50px 30px;\n  }\n`;\n\nconst HeroWrapper = styled.div`\n  display: flex;\n  align-items: center;\n`;\n\nconst Hero = () => (\n  <HeroWrapper>\n    <DocumentGraphicImage src=\"/images/document-graphic.png\" />\n    <Link href=\"/repl\" legacyBehavior>\n      <Button primary=\"true\">Try it out!</Button>\n    </Link>\n  </HeroWrapper>\n);\n\nconst LogoBanner = styled(Logo)`\n  display: none;\n  padding: 0 0 3em 0;\n\n  ${media.phone} {\n    display: flex;\n  }\n`;\n\nconst Home = () => (\n  <Layout>\n    <EditButton to=\"https://github.com/react-pdf/site/blob/master/docs/quick-start.md\" />\n    <LogoBanner size=\"37px\" rotate withText />\n    <Title />\n    <Hero />\n    <Content />\n  </Layout>\n);\n\nexport default Home;\n"
  },
  {
    "path": "pages/node.js",
    "content": "\nimport React from 'react';\n\nimport Node from '../docs/node.md'\nimport Layout from '../src/components/Layout';\n\nconst NodePage = () => {\n  return (\n    <Layout>\n      <Node />\n    </Layout>\n  );\n};\n\nexport default NodePage;\n"
  },
  {
    "path": "pages/rendering-process.js",
    "content": "\nimport React from 'react';\n\nimport Layout from '../src/components/Layout';\nimport RenderingProcess from '../docs/rendering-process.md'\n\nconst RenderingProcessPage = () => {\n  return (\n    <Layout>\n      <RenderingProcess />\n    </Layout>\n  );\n};\n\nexport default RenderingProcessPage;\n"
  },
  {
    "path": "pages/repl.js",
    "content": "import dynamic from 'next/dynamic';\nimport styled from '@emotion/styled';\nimport { useAsync } from 'react-use';\nimport { withRouter } from 'next/router';\nimport React, { useState, useMemo } from 'react';\n\nimport media from '../src/styled/media';\nimport Icon from '../src/components/UI/Icon';\nimport Logo from '../src/components/UI/Logo';\nimport Spinner from '../src/components/UI/Spinner';\nimport BackButton from '../src/components/Repl/BackButton';\nimport ReplHeader from '../src/components/Repl/ReplHeader';\nimport ReplFooter from '../src/components/Repl/ReplFooter';\nimport GitHubIcon from '../src/components/Layout/GitHubIcon';\nimport { compress, decompress } from '../src/lib/compress';\n\nconst Repl = dynamic(import('../src/components/Repl'), { loading: Spinner, ssr: false });\n\nconst examples = {\n  g: require('raw-loader!../examples/g.txt'),\n  svg: require('raw-loader!../examples/svg.txt'),\n  line: require('raw-loader!../examples/line.txt'),\n  path: require('raw-loader!../examples/path.txt'),\n  rect: require('raw-loader!../examples/rect.txt'),\n  text: require('raw-loader!../examples/text.txt'),\n  emoji: require('raw-loader!../examples/emoji.txt'),\n  knobs: require('raw-loader!../examples/knobs.txt'),\n  circle: require('raw-loader!../examples/circle.txt'),\n  styles: require('raw-loader!../examples/styles.txt'),\n  resume: require('raw-loader!../examples/resume.txt'),\n  images: require('raw-loader!../examples/images.txt'),\n  svgtext: require('raw-loader!../examples/svgtext.txt'),\n  ellipse: require('raw-loader!../examples/ellipse.txt'),\n  polygon: require('raw-loader!../examples/polygon.txt'),\n  clippath: require('raw-loader!../examples/clippath.txt'),\n  polyline: require('raw-loader!../examples/polyline.txt'),\n  fractals: require('raw-loader!../examples/fractals.txt'),\n  checkbox: require('raw-loader!../examples/checkbox.txt'),\n  textinput: require('raw-loader!../examples/textinput.txt'),\n  formfield: require('raw-loader!../examples/formfield.txt'),\n  debugging: require('raw-loader!../examples/debugging.txt'),\n  'page-wrap': require('raw-loader!../examples/page-wrap.txt'),\n  'page-breaks': require('raw-loader!../examples/page-breaks.txt'),\n  'quick-start': require('raw-loader!../examples/quick-start.txt'),\n  'page-numbers': require('raw-loader!../examples/page-numbers.txt'),\n  'mixed-styles': require('raw-loader!../examples/mixed-styles.txt'),\n  'inline-styles': require('raw-loader!../examples/inline-styles.txt'),\n  math: require('raw-loader!../examples/math.txt'),\n  lineargradient: require('raw-loader!../examples/lineargradient.txt'),\n  radialgradient: require('raw-loader!../examples/radialgradient.txt'),\n  'font-register': require('raw-loader!../examples/font-register.txt'),\n  'media-queries': require('raw-loader!../examples/media-queries.txt'),\n  'picker-formlist': require('raw-loader!../examples/picker-formlist.txt'),\n  'fixed-components': require('raw-loader!../examples/fixed-components.txt'),\n  'disable-wrapping': require('raw-loader!../examples/disable-wrapping.txt'),\n  'orphans-and-widows': require('raw-loader!../examples/orphans-and-widows.txt'),\n  'disable-hyphenation': require('raw-loader!../examples/disable-hyphenation.txt'),\n  'hyphenation-callback': require('raw-loader!../examples/hyphenation-callback.txt'),\n  'breakable-unbreakable': require('raw-loader!../examples/breakable-unbreakable.txt'),\n};\n\nconst NAV_WIDTH = 64;\n\nconst Section = styled.section`\n  display: flex;\n  flex-direction: column;\n  width: calc(100vw - ${NAV_WIDTH}px);\n\n  ${media.desktop} {\n    width: 100vw;\n  }\n`;\n\nconst Main = styled.main`\n  display: flex;\n  height: 100vh;\n`;\n\nconst Nav = styled.nav`\n  display: flex;\n  align-items: center;\n  width: ${NAV_WIDTH}px;\n  flex-direction: column;\n  background-color: #f8f8f8;\n\n  ${media.desktop} {\n    display: none;\n  }\n`;\n\nconst Back = styled(BackButton)`\n  border: 0px;\n  width: 100%;\n  height: 64px;\n  color: white;\n  display: flex;\n  outline: none;\n  cursor: pointer;\n  align-items: center;\n  text-decoration: none;\n  justify-content: center;\n  background: ${({ theme }) => theme.red};\n`;\n\nconst NavBody = styled.div`\n  flex: 1;\n`;\n\nconst SmallLogo = styled(Logo)`\n  padding: 0px;\n  margin-top: 64px;\n`;\n\nconst ReplPage = ({ router }) => {\n  const [code, setCode] = useState('');\n\n  const [activeTab, setActiveTab] = useState('pdf');\n\n  const [documentUrl, setDocumentUrl] = useState(null);\n\n  const query = router.query;\n\n  const mount = useAsync(async () => {\n    let initialValue = '';\n\n    if (query.code) {\n      initialValue = setInitialValueFromCode(query.code);\n    } else if (query.example) {\n      initialValue = await setInitialValueFromExample(query.example);\n    } else {\n      initialValue = await setInitialValueFromExample('page-wrap');\n    }\n\n    setCode(initialValue || '');\n  }, [query.code, query.example]);\n\n  const shareUrl = useMemo(() => {\n    return (\n      process.browser &&\n      `${window.location.protocol}//${\n        window.location.host\n      }/repl?code=${compress(code)}`\n    );\n  }, [code]);\n\n  if (mount.loading) return null;\n\n  return (\n    <Main>\n      <Nav>\n        <Back>\n          <Icon type=\"arrow-left\" label=\"Back\" size={18} />\n        </Back>\n        <NavBody>\n          <SmallLogo size=\"32px\" />\n        </NavBody>\n        <GitHubIcon />\n      </Nav>\n      <Section>\n        <ReplHeader activeTab={activeTab} onTabClick={setActiveTab} />\n        <Repl\n          value={code}\n          activeTab={activeTab}\n          onChange={setCode}\n          onUrlChange={setDocumentUrl}\n        />\n        <ReplFooter code={code} shareUrl={shareUrl} documentUrl={documentUrl} />\n      </Section>\n    </Main>\n  );\n};\n\nconst setInitialValueFromCode = (code) => {\n  let initialValue = '';\n\n  try {\n    initialValue = decompress(code);\n  } catch (e) {\n    // noob\n  }\n\n  return initialValue;\n};\n\nconst setInitialValueFromExample = async (example) => {\n  let initialValue = '';\n\n  if (examples[example]) {\n    initialValue = await examples[example];\n  }\n\n  return initialValue;\n};\n\nexport default withRouter(ReplPage);\n"
  },
  {
    "path": "pages/styling.js",
    "content": "\nimport React from 'react';\n\nimport Styling from '../docs/styling.md'\nimport Layout from '../src/components/Layout';\n\nconst StylingPage = () => {\n  return (\n    <Layout>\n      <Styling />\n    </Layout>\n  );\n};\n\nexport default StylingPage;\n"
  },
  {
    "path": "pages/svg.js",
    "content": "\nimport React from 'react';\n\nimport SVG from '../docs/svg.md'\nimport Layout from '../src/components/Layout';\n\nconst SVGPage = () => {\n  return (\n    <Layout>\n      <SVG />\n    </Layout>\n  );\n};\n\nexport default SVGPage;\n"
  },
  {
    "path": "prettier.config.js",
    "content": "module.exports = {\n  singleQuote: true,\n  trailingComma: 'all',\n};\n"
  },
  {
    "path": "public/favicons/browserconfig.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<browserconfig>\n    <msapplication>\n        <tile>\n            <square150x150logo src=\"/favicons/mstile-150x150.png?v=qABAGbMGwd\"/>\n            <TileColor>#fafafa</TileColor>\n        </tile>\n    </msapplication>\n</browserconfig>\n"
  },
  {
    "path": "public/favicons/site.webmanifest",
    "content": "{\n    \"name\": \"React-pdf\",\n    \"short_name\": \"React-pdf\",\n    \"icons\": [\n        {\n            \"src\": \"/favicons/android-chrome-192x192.png?v=qABAGbMGwd\",\n            \"sizes\": \"192x192\",\n            \"type\": \"image/png\"\n        },\n        {\n            \"src\": \"/favicons/android-chrome-256x256.png?v=qABAGbMGwd\",\n            \"sizes\": \"256x256\",\n            \"type\": \"image/png\"\n        }\n    ],\n    \"theme_color\": \"#ffffff\",\n    \"background_color\": \"#ffffff\",\n    \"display\": \"standalone\"\n}\n"
  },
  {
    "path": "public/scripts/pdf.worker.js",
    "content": "/**\n * @licstart The following is the entire license notice for the\n * Javascript code in this page\n *\n * Copyright 2017 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(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"pdfjs-dist/build/pdf.worker\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"pdfjs-dist/build/pdf.worker\"] = factory();\n\telse\n\t\troot[\"pdfjs-dist/build/pdf.worker\"] = root.pdfjsWorker = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __w_pdfjs_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __w_pdfjs_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__w_pdfjs_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__w_pdfjs_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__w_pdfjs_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__w_pdfjs_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__w_pdfjs_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__w_pdfjs_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __w_pdfjs_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__w_pdfjs_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __w_pdfjs_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__w_pdfjs_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__w_pdfjs_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__w_pdfjs_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__w_pdfjs_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __w_pdfjs_require__(__w_pdfjs_require__.s = 0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar pdfjsVersion = '2.0.736';\nvar pdfjsBuild = '444976bc';\nvar pdfjsCoreWorker = __w_pdfjs_require__(1);\nexports.WorkerMessageHandler = pdfjsCoreWorker.WorkerMessageHandler;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.WorkerMessageHandler = exports.WorkerTask = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _pdf_manager = __w_pdfjs_require__(119);\n\nvar _is_node = __w_pdfjs_require__(5);\n\nvar _is_node2 = _interopRequireDefault(_is_node);\n\nvar _message_handler = __w_pdfjs_require__(157);\n\nvar _primitives = __w_pdfjs_require__(123);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WorkerTask = function WorkerTaskClosure() {\n  function WorkerTask(name) {\n    this.name = name;\n    this.terminated = false;\n    this._capability = (0, _util.createPromiseCapability)();\n  }\n  WorkerTask.prototype = {\n    get finished() {\n      return this._capability.promise;\n    },\n    finish: function finish() {\n      this._capability.resolve();\n    },\n    terminate: function terminate() {\n      this.terminated = true;\n    },\n    ensureNotTerminated: function ensureNotTerminated() {\n      if (this.terminated) {\n        throw new Error('Worker task was terminated');\n      }\n    }\n  };\n  return WorkerTask;\n}();\n;\nvar PDFWorkerStream = function PDFWorkerStreamClosure() {\n  function PDFWorkerStream(msgHandler) {\n    this._msgHandler = msgHandler;\n    this._contentLength = null;\n    this._fullRequestReader = null;\n    this._rangeRequestReaders = [];\n  }\n  PDFWorkerStream.prototype = {\n    getFullReader: function getFullReader() {\n      (0, _util.assert)(!this._fullRequestReader);\n      this._fullRequestReader = new PDFWorkerStreamReader(this._msgHandler);\n      return this._fullRequestReader;\n    },\n    getRangeReader: function getRangeReader(begin, end) {\n      var reader = new PDFWorkerStreamRangeReader(begin, end, this._msgHandler);\n      this._rangeRequestReaders.push(reader);\n      return reader;\n    },\n    cancelAllRequests: function cancelAllRequests(reason) {\n      if (this._fullRequestReader) {\n        this._fullRequestReader.cancel(reason);\n      }\n      var readers = this._rangeRequestReaders.slice(0);\n      readers.forEach(function (reader) {\n        reader.cancel(reason);\n      });\n    }\n  };\n  function PDFWorkerStreamReader(msgHandler) {\n    var _this = this;\n\n    this._msgHandler = msgHandler;\n    this._contentLength = null;\n    this._isRangeSupported = false;\n    this._isStreamingSupported = false;\n    var readableStream = this._msgHandler.sendWithStream('GetReader');\n    this._reader = readableStream.getReader();\n    this._headersReady = this._msgHandler.sendWithPromise('ReaderHeadersReady').then(function (data) {\n      _this._isStreamingSupported = data.isStreamingSupported;\n      _this._isRangeSupported = data.isRangeSupported;\n      _this._contentLength = data.contentLength;\n    });\n  }\n  PDFWorkerStreamReader.prototype = {\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    read: function read() {\n      return this._reader.read().then(function (_ref) {\n        var value = _ref.value,\n            done = _ref.done;\n\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    },\n    cancel: function cancel(reason) {\n      this._reader.cancel(reason);\n    }\n  };\n  function PDFWorkerStreamRangeReader(begin, end, msgHandler) {\n    this._msgHandler = msgHandler;\n    this.onProgress = null;\n    var readableStream = this._msgHandler.sendWithStream('GetRangeReader', {\n      begin: begin,\n      end: end\n    });\n    this._reader = readableStream.getReader();\n  }\n  PDFWorkerStreamRangeReader.prototype = {\n    get isStreamingSupported() {\n      return false;\n    },\n    read: function read() {\n      return this._reader.read().then(function (_ref2) {\n        var value = _ref2.value,\n            done = _ref2.done;\n\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    },\n    cancel: function cancel(reason) {\n      this._reader.cancel(reason);\n    }\n  };\n  return PDFWorkerStream;\n}();\nvar WorkerMessageHandler = {\n  setup: function setup(handler, port) {\n    var testMessageProcessed = false;\n    handler.on('test', function wphSetupTest(data) {\n      if (testMessageProcessed) {\n        return;\n      }\n      testMessageProcessed = true;\n      if (!(data instanceof Uint8Array)) {\n        handler.send('test', false);\n        return;\n      }\n      var supportTransfers = data[0] === 255;\n      handler.postMessageTransfers = supportTransfers;\n      var xhr = new XMLHttpRequest();\n      var responseExists = 'response' in xhr;\n      try {\n        xhr.responseType;\n      } catch (e) {\n        responseExists = false;\n      }\n      if (!responseExists) {\n        handler.send('test', false);\n        return;\n      }\n      handler.send('test', {\n        supportTypedArray: true,\n        supportTransfers: supportTransfers\n      });\n    });\n    handler.on('configure', function wphConfigure(data) {\n      (0, _util.setVerbosityLevel)(data.verbosity);\n    });\n    handler.on('GetDocRequest', function wphSetupDoc(data) {\n      return WorkerMessageHandler.createDocumentHandler(data, port);\n    });\n  },\n  createDocumentHandler: function createDocumentHandler(docParams, port) {\n    var pdfManager;\n    var terminated = false;\n    var cancelXHRs = null;\n    var WorkerTasks = [];\n    var apiVersion = docParams.apiVersion;\n    var workerVersion = '2.0.736';\n    if (apiVersion !== workerVersion) {\n      throw new Error('The API version \"' + apiVersion + '\" does not match ' + ('the Worker version \"' + workerVersion + '\".'));\n    }\n    var docId = docParams.docId;\n    var docBaseUrl = docParams.docBaseUrl;\n    var workerHandlerName = docParams.docId + '_worker';\n    var handler = new _message_handler.MessageHandler(workerHandlerName, docId, port);\n    handler.postMessageTransfers = docParams.postMessageTransfers;\n    function ensureNotTerminated() {\n      if (terminated) {\n        throw new Error('Worker was terminated');\n      }\n    }\n    function startWorkerTask(task) {\n      WorkerTasks.push(task);\n    }\n    function finishWorkerTask(task) {\n      task.finish();\n      var i = WorkerTasks.indexOf(task);\n      WorkerTasks.splice(i, 1);\n    }\n    function loadDocument(recoveryMode) {\n      var loadDocumentCapability = (0, _util.createPromiseCapability)();\n      var parseSuccess = function parseSuccess() {\n        Promise.all([pdfManager.ensureDoc('numPages'), pdfManager.ensureDoc('fingerprint')]).then(function (_ref3) {\n          var _ref4 = _slicedToArray(_ref3, 2),\n              numPages = _ref4[0],\n              fingerprint = _ref4[1];\n\n          loadDocumentCapability.resolve({\n            numPages: numPages,\n            fingerprint: fingerprint\n          });\n        }, parseFailure);\n      };\n      var parseFailure = function parseFailure(e) {\n        loadDocumentCapability.reject(e);\n      };\n      pdfManager.ensureDoc('checkHeader', []).then(function () {\n        pdfManager.ensureDoc('parseStartXRef', []).then(function () {\n          pdfManager.ensureDoc('parse', [recoveryMode]).then(parseSuccess, parseFailure);\n        }, parseFailure);\n      }, parseFailure);\n      return loadDocumentCapability.promise;\n    }\n    function getPdfManager(data, evaluatorOptions) {\n      var pdfManagerCapability = (0, _util.createPromiseCapability)();\n      var pdfManager;\n      var source = data.source;\n      if (source.data) {\n        try {\n          pdfManager = new _pdf_manager.LocalPdfManager(docId, source.data, source.password, evaluatorOptions, docBaseUrl);\n          pdfManagerCapability.resolve(pdfManager);\n        } catch (ex) {\n          pdfManagerCapability.reject(ex);\n        }\n        return pdfManagerCapability.promise;\n      }\n      var pdfStream,\n          cachedChunks = [];\n      try {\n        pdfStream = new PDFWorkerStream(handler);\n      } catch (ex) {\n        pdfManagerCapability.reject(ex);\n        return pdfManagerCapability.promise;\n      }\n      var fullRequest = pdfStream.getFullReader();\n      fullRequest.headersReady.then(function () {\n        if (!fullRequest.isRangeSupported) {\n          return;\n        }\n        var disableAutoFetch = source.disableAutoFetch || fullRequest.isStreamingSupported;\n        pdfManager = new _pdf_manager.NetworkPdfManager(docId, pdfStream, {\n          msgHandler: handler,\n          url: source.url,\n          password: source.password,\n          length: fullRequest.contentLength,\n          disableAutoFetch: disableAutoFetch,\n          rangeChunkSize: source.rangeChunkSize\n        }, evaluatorOptions, docBaseUrl);\n        for (var i = 0; i < cachedChunks.length; i++) {\n          pdfManager.sendProgressiveData(cachedChunks[i]);\n        }\n        cachedChunks = [];\n        pdfManagerCapability.resolve(pdfManager);\n        cancelXHRs = null;\n      }).catch(function (reason) {\n        pdfManagerCapability.reject(reason);\n        cancelXHRs = null;\n      });\n      var loaded = 0;\n      var flushChunks = function flushChunks() {\n        var pdfFile = (0, _util.arraysToBytes)(cachedChunks);\n        if (source.length && pdfFile.length !== source.length) {\n          (0, _util.warn)('reported HTTP length is different from actual');\n        }\n        try {\n          pdfManager = new _pdf_manager.LocalPdfManager(docId, pdfFile, source.password, evaluatorOptions, docBaseUrl);\n          pdfManagerCapability.resolve(pdfManager);\n        } catch (ex) {\n          pdfManagerCapability.reject(ex);\n        }\n        cachedChunks = [];\n      };\n      var readPromise = new Promise(function (resolve, reject) {\n        var readChunk = function readChunk(chunk) {\n          try {\n            ensureNotTerminated();\n            if (chunk.done) {\n              if (!pdfManager) {\n                flushChunks();\n              }\n              cancelXHRs = null;\n              return;\n            }\n            var data = chunk.value;\n            loaded += (0, _util.arrayByteLength)(data);\n            if (!fullRequest.isStreamingSupported) {\n              handler.send('DocProgress', {\n                loaded: loaded,\n                total: Math.max(loaded, fullRequest.contentLength || 0)\n              });\n            }\n            if (pdfManager) {\n              pdfManager.sendProgressiveData(data);\n            } else {\n              cachedChunks.push(data);\n            }\n            fullRequest.read().then(readChunk, reject);\n          } catch (e) {\n            reject(e);\n          }\n        };\n        fullRequest.read().then(readChunk, reject);\n      });\n      readPromise.catch(function (e) {\n        pdfManagerCapability.reject(e);\n        cancelXHRs = null;\n      });\n      cancelXHRs = function cancelXHRs() {\n        pdfStream.cancelAllRequests('abort');\n      };\n      return pdfManagerCapability.promise;\n    }\n    function setupDoc(data) {\n      function onSuccess(doc) {\n        ensureNotTerminated();\n        handler.send('GetDoc', { pdfInfo: doc });\n      }\n      function onFailure(e) {\n        ensureNotTerminated();\n        if (e instanceof _util.PasswordException) {\n          var task = new WorkerTask('PasswordException: response ' + e.code);\n          startWorkerTask(task);\n          handler.sendWithPromise('PasswordRequest', e).then(function (data) {\n            finishWorkerTask(task);\n            pdfManager.updatePassword(data.password);\n            pdfManagerReady();\n          }).catch(function (boundException) {\n            finishWorkerTask(task);\n            handler.send('PasswordException', boundException);\n          }.bind(null, e));\n        } else if (e instanceof _util.InvalidPDFException) {\n          handler.send('InvalidPDF', e);\n        } else if (e instanceof _util.MissingPDFException) {\n          handler.send('MissingPDF', e);\n        } else if (e instanceof _util.UnexpectedResponseException) {\n          handler.send('UnexpectedResponse', e);\n        } else {\n          handler.send('UnknownError', new _util.UnknownErrorException(e.message, e.toString()));\n        }\n      }\n      function pdfManagerReady() {\n        ensureNotTerminated();\n        loadDocument(false).then(onSuccess, function loadFailure(ex) {\n          ensureNotTerminated();\n          if (!(ex instanceof _util.XRefParseException)) {\n            onFailure(ex);\n            return;\n          }\n          pdfManager.requestLoadedStream();\n          pdfManager.onLoadedStream().then(function () {\n            ensureNotTerminated();\n            loadDocument(true).then(onSuccess, onFailure);\n          });\n        }, onFailure);\n      }\n      ensureNotTerminated();\n      var evaluatorOptions = {\n        forceDataSchema: data.disableCreateObjectURL,\n        maxImageSize: data.maxImageSize,\n        disableFontFace: data.disableFontFace,\n        nativeImageDecoderSupport: data.nativeImageDecoderSupport,\n        ignoreErrors: data.ignoreErrors,\n        isEvalSupported: data.isEvalSupported\n      };\n      getPdfManager(data, evaluatorOptions).then(function (newPdfManager) {\n        if (terminated) {\n          newPdfManager.terminate();\n          throw new Error('Worker was terminated');\n        }\n        pdfManager = newPdfManager;\n        pdfManager.onLoadedStream().then(function (stream) {\n          handler.send('DataLoaded', { length: stream.bytes.byteLength });\n        });\n      }).then(pdfManagerReady, onFailure);\n    }\n    handler.on('GetPage', function wphSetupGetPage(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 (_ref5) {\n          var _ref6 = _slicedToArray(_ref5, 4),\n              rotate = _ref6[0],\n              ref = _ref6[1],\n              userUnit = _ref6[2],\n              view = _ref6[3];\n\n          return {\n            rotate: rotate,\n            ref: ref,\n            userUnit: userUnit,\n            view: view\n          };\n        });\n      });\n    });\n    handler.on('GetPageIndex', function wphSetupGetPageIndex(data) {\n      var ref = new _primitives.Ref(data.ref.num, data.ref.gen);\n      var catalog = pdfManager.pdfDocument.catalog;\n      return catalog.getPageIndex(ref);\n    });\n    handler.on('GetDestinations', function wphSetupGetDestinations(data) {\n      return pdfManager.ensureCatalog('destinations');\n    });\n    handler.on('GetDestination', function wphSetupGetDestination(data) {\n      return pdfManager.ensureCatalog('getDestination', [data.id]);\n    });\n    handler.on('GetPageLabels', function wphSetupGetPageLabels(data) {\n      return pdfManager.ensureCatalog('pageLabels');\n    });\n    handler.on('GetPageMode', function wphSetupGetPageMode(data) {\n      return pdfManager.ensureCatalog('pageMode');\n    });\n    handler.on('GetAttachments', function wphSetupGetAttachments(data) {\n      return pdfManager.ensureCatalog('attachments');\n    });\n    handler.on('GetJavaScript', function wphSetupGetJavaScript(data) {\n      return pdfManager.ensureCatalog('javaScript');\n    });\n    handler.on('GetOutline', function wphSetupGetOutline(data) {\n      return pdfManager.ensureCatalog('documentOutline');\n    });\n    handler.on('GetMetadata', function wphSetupGetMetadata(data) {\n      return Promise.all([pdfManager.ensureDoc('documentInfo'), pdfManager.ensureCatalog('metadata')]);\n    });\n    handler.on('GetData', function wphSetupGetData(data) {\n      pdfManager.requestLoadedStream();\n      return pdfManager.onLoadedStream().then(function (stream) {\n        return stream.bytes;\n      });\n    });\n    handler.on('GetStats', function wphSetupGetStats(data) {\n      return pdfManager.pdfDocument.xref.stats;\n    });\n    handler.on('GetAnnotations', function wphSetupGetAnnotations(data) {\n      return pdfManager.getPage(data.pageIndex).then(function (page) {\n        return pdfManager.ensure(page, 'getAnnotationsData', [data.intent]);\n      });\n    });\n    handler.on('RenderPageRequest', function wphSetupRenderPage(data) {\n      var pageIndex = data.pageIndex;\n      pdfManager.getPage(pageIndex).then(function (page) {\n        var task = new WorkerTask('RenderPageRequest: page ' + pageIndex);\n        startWorkerTask(task);\n        var pageNum = pageIndex + 1;\n        var start = Date.now();\n        page.getOperatorList({\n          handler: handler,\n          task: task,\n          intent: data.intent,\n          renderInteractiveForms: data.renderInteractiveForms\n        }).then(function (operatorList) {\n          finishWorkerTask(task);\n          (0, _util.info)('page=' + pageNum + ' - getOperatorList: time=' + (Date.now() - start) + 'ms, len=' + operatorList.totalLength);\n        }, function (e) {\n          finishWorkerTask(task);\n          if (task.terminated) {\n            return;\n          }\n          handler.send('UnsupportedFeature', { featureId: _util.UNSUPPORTED_FEATURES.unknown });\n          var minimumStackMessage = 'worker.js: while trying to getPage() and getOperatorList()';\n          var wrappedException;\n          if (typeof e === 'string') {\n            wrappedException = {\n              message: e,\n              stack: minimumStackMessage\n            };\n          } else if ((typeof e === 'undefined' ? 'undefined' : _typeof(e)) === 'object') {\n            wrappedException = {\n              message: e.message || e.toString(),\n              stack: e.stack || minimumStackMessage\n            };\n          } else {\n            wrappedException = {\n              message: 'Unknown exception type: ' + (typeof e === 'undefined' ? 'undefined' : _typeof(e)),\n              stack: minimumStackMessage\n            };\n          }\n          handler.send('PageError', {\n            pageNum: pageNum,\n            error: wrappedException,\n            intent: data.intent\n          });\n        });\n      });\n    }, this);\n    handler.on('GetTextContent', function wphExtractText(data, sink) {\n      var pageIndex = data.pageIndex;\n      sink.onPull = function (desiredSize) {};\n      sink.onCancel = function (reason) {};\n      pdfManager.getPage(pageIndex).then(function (page) {\n        var task = new WorkerTask('GetTextContent: page ' + pageIndex);\n        startWorkerTask(task);\n        var pageNum = pageIndex + 1;\n        var start = Date.now();\n        page.extractTextContent({\n          handler: handler,\n          task: task,\n          sink: sink,\n          normalizeWhitespace: data.normalizeWhitespace,\n          combineTextItems: data.combineTextItems\n        }).then(function () {\n          finishWorkerTask(task);\n          (0, _util.info)('text indexing: page=' + pageNum + ' - time=' + (Date.now() - start) + 'ms');\n          sink.close();\n        }, function (reason) {\n          finishWorkerTask(task);\n          if (task.terminated) {\n            return;\n          }\n          sink.error(reason);\n          throw reason;\n        });\n      });\n    });\n    handler.on('Cleanup', function wphCleanup(data) {\n      return pdfManager.cleanup();\n    });\n    handler.on('Terminate', function wphTerminate(data) {\n      terminated = true;\n      if (pdfManager) {\n        pdfManager.terminate();\n        pdfManager = null;\n      }\n      if (cancelXHRs) {\n        cancelXHRs();\n      }\n      var waitOn = [];\n      WorkerTasks.forEach(function (task) {\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 wphReady(data) {\n      setupDoc(docParams);\n      docParams = null;\n    });\n    return workerHandlerName;\n  },\n  initializeFromPort: function initializeFromPort(port) {\n    var handler = new _message_handler.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' && !(0, _is_node2.default)() && typeof self !== 'undefined' && isMessagePort(self)) {\n  WorkerMessageHandler.initializeFromPort(self);\n}\nexports.WorkerTask = WorkerTask;\nexports.WorkerMessageHandler = WorkerMessageHandler;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.unreachable = exports.warn = exports.utf8StringToString = exports.stringToUTF8String = exports.stringToPDFString = exports.stringToBytes = exports.string32 = exports.shadow = exports.setVerbosityLevel = exports.URL = exports.ReadableStream = exports.removeNullCharacters = exports.readUint32 = exports.readUint16 = exports.readInt8 = exports.log2 = exports.isEvalSupported = exports.isLittleEndian = exports.createValidAbsoluteUrl = exports.isSameOrigin = exports.isSpace = exports.isString = exports.isNum = exports.isEmptyObj = exports.isBool = exports.isArrayBuffer = exports.info = exports.getVerbosityLevel = exports.getLookupTableFactory = exports.getInheritableProperty = exports.deprecated = exports.createObjectURL = exports.createPromiseCapability = exports.createBlob = exports.bytesToString = exports.assert = exports.arraysToBytes = exports.arrayByteLength = exports.FormatError = exports.XRefParseException = exports.toRomanNumerals = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.StreamType = exports.PasswordResponses = exports.PasswordException = exports.NativeImageDecoding = exports.MissingPDFException = exports.MissingDataException = exports.InvalidPDFException = exports.AbortException = exports.CMapCompressionType = exports.ImageKind = exports.FontType = exports.AnnotationType = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.UNSUPPORTED_FEATURES = exports.VerbosityLevel = exports.OPS = exports.IDENTITY_MATRIX = exports.FONT_IDENTITY_MATRIX = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n__w_pdfjs_require__(3);\n\nvar _streams_polyfill = __w_pdfjs_require__(115);\n\nvar _url_polyfill = __w_pdfjs_require__(117);\n\nvar FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];\nvar NativeImageDecoding = {\n  NONE: 'none',\n  DECODE: 'decode',\n  DISPLAY: 'display'\n};\nvar 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};\nvar ImageKind = {\n  GRAYSCALE_1BPP: 1,\n  RGB_24BPP: 2,\n  RGBA_32BPP: 3\n};\nvar 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};\nvar 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};\nvar 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};\nvar AnnotationBorderStyleType = {\n  SOLID: 1,\n  DASHED: 2,\n  BEVELED: 3,\n  INSET: 4,\n  UNDERLINE: 5\n};\nvar StreamType = {\n  UNKNOWN: 0,\n  FLATE: 1,\n  LZW: 2,\n  DCT: 3,\n  JPX: 4,\n  JBIG: 5,\n  A85: 6,\n  AHX: 7,\n  CCF: 8,\n  RL: 9\n};\nvar FontType = {\n  UNKNOWN: 0,\n  TYPE1: 1,\n  TYPE1C: 2,\n  CIDFONTTYPE0: 3,\n  CIDFONTTYPE0C: 4,\n  TRUETYPE: 5,\n  CIDFONTTYPE2: 6,\n  TYPE3: 7,\n  OPENTYPE: 8,\n  TYPE0: 9,\n  MMTYPE1: 10\n};\nvar VerbosityLevel = {\n  ERRORS: 0,\n  WARNINGS: 1,\n  INFOS: 5\n};\nvar CMapCompressionType = {\n  NONE: 0,\n  BINARY: 1,\n  STREAM: 2\n};\nvar 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  beginAnnotations: 78,\n  endAnnotations: 79,\n  beginAnnotation: 80,\n  endAnnotation: 81,\n  paintJpegXObject: 82,\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};\nvar 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 deprecated(details) {\n  console.log('Deprecated API usage: ' + details);\n}\nfunction unreachable(msg) {\n  throw new Error(msg);\n}\nfunction assert(cond, msg) {\n  if (!cond) {\n    unreachable(msg);\n  }\n}\nvar UNSUPPORTED_FEATURES = {\n  unknown: 'unknown',\n  forms: 'forms',\n  javaScript: 'javaScript',\n  smask: 'smask',\n  shadingPattern: 'shadingPattern',\n  font: 'font'\n};\nfunction isSameOrigin(baseUrl, otherUrl) {\n  try {\n    var base = new _url_polyfill.URL(baseUrl);\n    if (!base.origin || base.origin === 'null') {\n      return false;\n    }\n  } catch (e) {\n    return false;\n  }\n  var other = new _url_polyfill.URL(otherUrl, base);\n  return base.origin === other.origin;\n}\nfunction isValidProtocol(url) {\n  if (!url) {\n    return false;\n  }\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) {\n  if (!url) {\n    return null;\n  }\n  try {\n    var absoluteUrl = baseUrl ? new _url_polyfill.URL(url, baseUrl) : new _url_polyfill.URL(url);\n    if (isValidProtocol(absoluteUrl)) {\n      return absoluteUrl;\n    }\n  } catch (ex) {}\n  return null;\n}\nfunction shadow(obj, prop, value) {\n  Object.defineProperty(obj, prop, {\n    value: value,\n    enumerable: true,\n    configurable: true,\n    writable: false\n  });\n  return value;\n}\nfunction getLookupTableFactory(initializer) {\n  var lookup;\n  return function () {\n    if (initializer) {\n      lookup = Object.create(null);\n      initializer(lookup);\n      initializer = null;\n    }\n    return lookup;\n  };\n}\nvar PasswordResponses = {\n  NEED_PASSWORD: 1,\n  INCORRECT_PASSWORD: 2\n};\nvar PasswordException = function PasswordExceptionClosure() {\n  function PasswordException(msg, code) {\n    this.name = 'PasswordException';\n    this.message = msg;\n    this.code = code;\n  }\n  PasswordException.prototype = new Error();\n  PasswordException.constructor = PasswordException;\n  return PasswordException;\n}();\nvar UnknownErrorException = function UnknownErrorExceptionClosure() {\n  function UnknownErrorException(msg, details) {\n    this.name = 'UnknownErrorException';\n    this.message = msg;\n    this.details = details;\n  }\n  UnknownErrorException.prototype = new Error();\n  UnknownErrorException.constructor = UnknownErrorException;\n  return UnknownErrorException;\n}();\nvar InvalidPDFException = function InvalidPDFExceptionClosure() {\n  function InvalidPDFException(msg) {\n    this.name = 'InvalidPDFException';\n    this.message = msg;\n  }\n  InvalidPDFException.prototype = new Error();\n  InvalidPDFException.constructor = InvalidPDFException;\n  return InvalidPDFException;\n}();\nvar MissingPDFException = function MissingPDFExceptionClosure() {\n  function MissingPDFException(msg) {\n    this.name = 'MissingPDFException';\n    this.message = msg;\n  }\n  MissingPDFException.prototype = new Error();\n  MissingPDFException.constructor = MissingPDFException;\n  return MissingPDFException;\n}();\nvar UnexpectedResponseException = function UnexpectedResponseExceptionClosure() {\n  function UnexpectedResponseException(msg, status) {\n    this.name = 'UnexpectedResponseException';\n    this.message = msg;\n    this.status = status;\n  }\n  UnexpectedResponseException.prototype = new Error();\n  UnexpectedResponseException.constructor = UnexpectedResponseException;\n  return UnexpectedResponseException;\n}();\nvar MissingDataException = function MissingDataExceptionClosure() {\n  function MissingDataException(begin, end) {\n    this.begin = begin;\n    this.end = end;\n    this.message = 'Missing data [' + begin + ', ' + end + ')';\n  }\n  MissingDataException.prototype = new Error();\n  MissingDataException.prototype.name = 'MissingDataException';\n  MissingDataException.constructor = MissingDataException;\n  return MissingDataException;\n}();\nvar XRefParseException = function XRefParseExceptionClosure() {\n  function XRefParseException(msg) {\n    this.message = msg;\n  }\n  XRefParseException.prototype = new Error();\n  XRefParseException.prototype.name = 'XRefParseException';\n  XRefParseException.constructor = XRefParseException;\n  return XRefParseException;\n}();\nvar FormatError = function FormatErrorClosure() {\n  function FormatError(msg) {\n    this.message = msg;\n  }\n  FormatError.prototype = new Error();\n  FormatError.prototype.name = 'FormatError';\n  FormatError.constructor = FormatError;\n  return FormatError;\n}();\nvar AbortException = function AbortExceptionClosure() {\n  function AbortException(msg) {\n    this.name = 'AbortException';\n    this.message = msg;\n  }\n  AbortException.prototype = new Error();\n  AbortException.constructor = AbortException;\n  return AbortException;\n}();\nvar NullCharactersRegExp = /\\x00/g;\nfunction removeNullCharacters(str) {\n  if (typeof str !== 'string') {\n    warn('The argument for removeNullCharacters must be a string.');\n    return str;\n  }\n  return str.replace(NullCharactersRegExp, '');\n}\nfunction bytesToString(bytes) {\n  assert(bytes !== null && (typeof bytes === 'undefined' ? 'undefined' : _typeof(bytes)) === 'object' && bytes.length !== undefined, 'Invalid argument for bytesToString');\n  var length = bytes.length;\n  var MAX_ARGUMENT_COUNT = 8192;\n  if (length < MAX_ARGUMENT_COUNT) {\n    return String.fromCharCode.apply(null, bytes);\n  }\n  var strBuf = [];\n  for (var i = 0; i < length; i += MAX_ARGUMENT_COUNT) {\n    var chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length);\n    var chunk = bytes.subarray(i, chunkEnd);\n    strBuf.push(String.fromCharCode.apply(null, chunk));\n  }\n  return strBuf.join('');\n}\nfunction stringToBytes(str) {\n  assert(typeof str === 'string', 'Invalid argument for stringToBytes');\n  var length = str.length;\n  var bytes = new Uint8Array(length);\n  for (var i = 0; i < length; ++i) {\n    bytes[i] = str.charCodeAt(i) & 0xFF;\n  }\n  return bytes;\n}\nfunction arrayByteLength(arr) {\n  if (arr.length !== undefined) {\n    return arr.length;\n  }\n  assert(arr.byteLength !== undefined);\n  return arr.byteLength;\n}\nfunction arraysToBytes(arr) {\n  if (arr.length === 1 && arr[0] instanceof Uint8Array) {\n    return arr[0];\n  }\n  var resultLength = 0;\n  var i,\n      ii = arr.length;\n  var item, itemLength;\n  for (i = 0; i < ii; i++) {\n    item = arr[i];\n    itemLength = arrayByteLength(item);\n    resultLength += itemLength;\n  }\n  var pos = 0;\n  var data = new Uint8Array(resultLength);\n  for (i = 0; i < ii; i++) {\n    item = arr[i];\n    if (!(item instanceof Uint8Array)) {\n      if (typeof item === 'string') {\n        item = stringToBytes(item);\n      } else {\n        item = new Uint8Array(item);\n      }\n    }\n    itemLength = item.byteLength;\n    data.set(item, pos);\n    pos += itemLength;\n  }\n  return data;\n}\nfunction string32(value) {\n  return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff);\n}\nfunction log2(x) {\n  if (x <= 0) {\n    return 0;\n  }\n  return Math.ceil(Math.log2(x));\n}\nfunction readInt8(data, start) {\n  return data[start] << 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 isLittleEndian() {\n  var buffer8 = new Uint8Array(4);\n  buffer8[0] = 1;\n  var 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 (e) {\n    return false;\n  }\n}\nfunction getInheritableProperty(_ref) {\n  var dict = _ref.dict,\n      key = _ref.key,\n      _ref$getArray = _ref.getArray,\n      getArray = _ref$getArray === undefined ? false : _ref$getArray,\n      _ref$stopWhenFound = _ref.stopWhenFound,\n      stopWhenFound = _ref$stopWhenFound === undefined ? true : _ref$stopWhenFound;\n\n  var LOOP_LIMIT = 100;\n  var loopCount = 0;\n  var values = void 0;\n  while (dict) {\n    var value = getArray ? dict.getArray(key) : dict.get(key);\n    if (value !== undefined) {\n      if (stopWhenFound) {\n        return value;\n      }\n      if (!values) {\n        values = [];\n      }\n      values.push(value);\n    }\n    if (++loopCount > LOOP_LIMIT) {\n      warn('getInheritableProperty: maximum loop count exceeded for \"' + key + '\"');\n      break;\n    }\n    dict = dict.get('Parent');\n  }\n  return values;\n}\nvar IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];\nvar Util = function UtilClosure() {\n  function Util() {}\n  var rgbBuf = ['rgb(', 0, ',', 0, ',', 0, ')'];\n  Util.makeCssRgb = function Util_makeCssRgb(r, g, b) {\n    rgbBuf[1] = r;\n    rgbBuf[3] = g;\n    rgbBuf[5] = b;\n    return rgbBuf.join('');\n  };\n  Util.transform = function Util_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  Util.applyTransform = function Util_applyTransform(p, m) {\n    var xt = p[0] * m[0] + p[1] * m[2] + m[4];\n    var yt = p[0] * m[1] + p[1] * m[3] + m[5];\n    return [xt, yt];\n  };\n  Util.applyInverseTransform = function Util_applyInverseTransform(p, m) {\n    var d = m[0] * m[3] - m[1] * m[2];\n    var xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d;\n    var yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d;\n    return [xt, yt];\n  };\n  Util.getAxialAlignedBoundingBox = function Util_getAxialAlignedBoundingBox(r, m) {\n    var p1 = Util.applyTransform(r, m);\n    var p2 = Util.applyTransform(r.slice(2, 4), m);\n    var p3 = Util.applyTransform([r[0], r[3]], m);\n    var p4 = Util.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  Util.inverseTransform = function Util_inverseTransform(m) {\n    var 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  Util.apply3dTransform = function Util_apply3dTransform(m, v) {\n    return [m[0] * v[0] + m[1] * v[1] + m[2] * v[2], m[3] * v[0] + m[4] * v[1] + m[5] * v[2], m[6] * v[0] + m[7] * v[1] + m[8] * v[2]];\n  };\n  Util.singularValueDecompose2dScale = function Util_singularValueDecompose2dScale(m) {\n    var transpose = [m[0], m[2], m[1], m[3]];\n    var a = m[0] * transpose[0] + m[1] * transpose[2];\n    var b = m[0] * transpose[1] + m[1] * transpose[3];\n    var c = m[2] * transpose[0] + m[3] * transpose[2];\n    var d = m[2] * transpose[1] + m[3] * transpose[3];\n    var first = (a + d) / 2;\n    var second = Math.sqrt((a + d) * (a + d) - 4 * (a * d - c * b)) / 2;\n    var sx = first + second || 1;\n    var sy = first - second || 1;\n    return [Math.sqrt(sx), Math.sqrt(sy)];\n  };\n  Util.normalizeRect = function Util_normalizeRect(rect) {\n    var 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  Util.intersect = function Util_intersect(rect1, rect2) {\n    function compare(a, b) {\n      return a - b;\n    }\n    var orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare),\n        orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare),\n        result = [];\n    rect1 = Util.normalizeRect(rect1);\n    rect2 = Util.normalizeRect(rect2);\n    if (orderedX[0] === rect1[0] && orderedX[1] === rect2[0] || orderedX[0] === rect2[0] && orderedX[1] === rect1[0]) {\n      result[0] = orderedX[1];\n      result[2] = orderedX[2];\n    } else {\n      return false;\n    }\n    if (orderedY[0] === rect1[1] && orderedY[1] === rect2[1] || orderedY[0] === rect2[1] && orderedY[1] === rect1[1]) {\n      result[1] = orderedY[1];\n      result[3] = orderedY[2];\n    } else {\n      return false;\n    }\n    return result;\n  };\n  return Util;\n}();\nvar 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) {\n  var lowerCase = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n  assert(Number.isInteger(number) && number > 0, 'The number should be a positive integer.');\n  var pos = void 0,\n      romanBuf = [];\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  var romanStr = romanBuf.join('');\n  return lowerCase ? romanStr.toLowerCase() : romanStr;\n}\nvar 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  var i,\n      n = str.length,\n      strBuf = [];\n  if (str[0] === '\\xFE' && str[1] === '\\xFF') {\n    for (i = 2; i < n; i += 2) {\n      strBuf.push(String.fromCharCode(str.charCodeAt(i) << 8 | str.charCodeAt(i + 1)));\n    }\n  } else {\n    for (i = 0; i < n; ++i) {\n      var code = PDFStringTranslateTable[str.charCodeAt(i)];\n      strBuf.push(code ? String.fromCharCode(code) : str.charAt(i));\n    }\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 isEmptyObj(obj) {\n  for (var key in obj) {\n    return false;\n  }\n  return true;\n}\nfunction isBool(v) {\n  return typeof v === 'boolean';\n}\nfunction isNum(v) {\n  return typeof v === 'number';\n}\nfunction isString(v) {\n  return typeof v === 'string';\n}\nfunction isArrayBuffer(v) {\n  return (typeof v === 'undefined' ? 'undefined' : _typeof(v)) === 'object' && v !== null && v.byteLength !== undefined;\n}\nfunction isSpace(ch) {\n  return ch === 0x20 || ch === 0x09 || ch === 0x0D || ch === 0x0A;\n}\nfunction createPromiseCapability() {\n  var capability = {};\n  capability.promise = new Promise(function (resolve, reject) {\n    capability.resolve = resolve;\n    capability.reject = reject;\n  });\n  return capability;\n}\nvar createBlob = function createBlob(data, contentType) {\n  if (typeof Blob !== 'undefined') {\n    return new Blob([data], { type: contentType });\n  }\n  throw new Error('The \"Blob\" constructor is not supported.');\n};\nvar createObjectURL = function createObjectURLClosure() {\n  var digits = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n  return function createObjectURL(data, contentType) {\n    var forceDataSchema = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n    if (!forceDataSchema && _url_polyfill.URL.createObjectURL) {\n      var blob = createBlob(data, contentType);\n      return _url_polyfill.URL.createObjectURL(blob);\n    }\n    var buffer = 'data:' + contentType + ';base64,';\n    for (var i = 0, ii = data.length; i < ii; i += 3) {\n      var b1 = data[i] & 0xFF;\n      var b2 = data[i + 1] & 0xFF;\n      var b3 = data[i + 2] & 0xFF;\n      var d1 = b1 >> 2,\n          d2 = (b1 & 3) << 4 | b2 >> 4;\n      var d3 = i + 1 < ii ? (b2 & 0xF) << 2 | b3 >> 6 : 64;\n      var d4 = i + 2 < ii ? b3 & 0x3F : 64;\n      buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4];\n    }\n    return buffer;\n  };\n}();\nexports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX;\nexports.IDENTITY_MATRIX = IDENTITY_MATRIX;\nexports.OPS = OPS;\nexports.VerbosityLevel = VerbosityLevel;\nexports.UNSUPPORTED_FEATURES = UNSUPPORTED_FEATURES;\nexports.AnnotationBorderStyleType = AnnotationBorderStyleType;\nexports.AnnotationFieldFlag = AnnotationFieldFlag;\nexports.AnnotationFlag = AnnotationFlag;\nexports.AnnotationType = AnnotationType;\nexports.FontType = FontType;\nexports.ImageKind = ImageKind;\nexports.CMapCompressionType = CMapCompressionType;\nexports.AbortException = AbortException;\nexports.InvalidPDFException = InvalidPDFException;\nexports.MissingDataException = MissingDataException;\nexports.MissingPDFException = MissingPDFException;\nexports.NativeImageDecoding = NativeImageDecoding;\nexports.PasswordException = PasswordException;\nexports.PasswordResponses = PasswordResponses;\nexports.StreamType = StreamType;\nexports.TextRenderingMode = TextRenderingMode;\nexports.UnexpectedResponseException = UnexpectedResponseException;\nexports.UnknownErrorException = UnknownErrorException;\nexports.Util = Util;\nexports.toRomanNumerals = toRomanNumerals;\nexports.XRefParseException = XRefParseException;\nexports.FormatError = FormatError;\nexports.arrayByteLength = arrayByteLength;\nexports.arraysToBytes = arraysToBytes;\nexports.assert = assert;\nexports.bytesToString = bytesToString;\nexports.createBlob = createBlob;\nexports.createPromiseCapability = createPromiseCapability;\nexports.createObjectURL = createObjectURL;\nexports.deprecated = deprecated;\nexports.getInheritableProperty = getInheritableProperty;\nexports.getLookupTableFactory = getLookupTableFactory;\nexports.getVerbosityLevel = getVerbosityLevel;\nexports.info = info;\nexports.isArrayBuffer = isArrayBuffer;\nexports.isBool = isBool;\nexports.isEmptyObj = isEmptyObj;\nexports.isNum = isNum;\nexports.isString = isString;\nexports.isSpace = isSpace;\nexports.isSameOrigin = isSameOrigin;\nexports.createValidAbsoluteUrl = createValidAbsoluteUrl;\nexports.isLittleEndian = isLittleEndian;\nexports.isEvalSupported = isEvalSupported;\nexports.log2 = log2;\nexports.readInt8 = readInt8;\nexports.readUint16 = readUint16;\nexports.readUint32 = readUint32;\nexports.removeNullCharacters = removeNullCharacters;\nexports.ReadableStream = _streams_polyfill.ReadableStream;\nexports.URL = _url_polyfill.URL;\nexports.setVerbosityLevel = setVerbosityLevel;\nexports.shadow = shadow;\nexports.string32 = string32;\nexports.stringToBytes = stringToBytes;\nexports.stringToPDFString = stringToPDFString;\nexports.stringToUTF8String = stringToUTF8String;\nexports.utf8StringToString = utf8StringToString;\nexports.warn = warn;\nexports.unreachable = unreachable;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar globalScope = __w_pdfjs_require__(4);\nif (!globalScope._pdfjsCompatibilityChecked) {\n  globalScope._pdfjsCompatibilityChecked = true;\n  var isNodeJS = __w_pdfjs_require__(5);\n  var hasDOM = (typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && (typeof document === 'undefined' ? 'undefined' : _typeof(document)) === 'object';\n  (function checkNodeBtoa() {\n    if (globalScope.btoa || !isNodeJS()) {\n      return;\n    }\n    globalScope.btoa = function (chars) {\n      return Buffer.from(chars, 'binary').toString('base64');\n    };\n  })();\n  (function checkNodeAtob() {\n    if (globalScope.atob || !isNodeJS()) {\n      return;\n    }\n    globalScope.atob = function (input) {\n      return Buffer.from(input, 'base64').toString('binary');\n    };\n  })();\n  (function checkCurrentScript() {\n    if (!hasDOM) {\n      return;\n    }\n    if ('currentScript' in document) {\n      return;\n    }\n    Object.defineProperty(document, 'currentScript', {\n      get: function get() {\n        var scripts = document.getElementsByTagName('script');\n        return scripts[scripts.length - 1];\n      },\n\n      enumerable: true,\n      configurable: true\n    });\n  })();\n  (function checkChildNodeRemove() {\n    if (!hasDOM) {\n      return;\n    }\n    if (typeof Element.prototype.remove !== 'undefined') {\n      return;\n    }\n    Element.prototype.remove = function () {\n      if (this.parentNode) {\n        this.parentNode.removeChild(this);\n      }\n    };\n  })();\n  (function checkStringIncludes() {\n    if (String.prototype.includes) {\n      return;\n    }\n    __w_pdfjs_require__(6);\n  })();\n  (function checkArrayIncludes() {\n    if (Array.prototype.includes) {\n      return;\n    }\n    __w_pdfjs_require__(34);\n  })();\n  (function checkObjectAssign() {\n    if (Object.assign) {\n      return;\n    }\n    __w_pdfjs_require__(43);\n  })();\n  (function checkMathLog2() {\n    if (Math.log2) {\n      return;\n    }\n    Math.log2 = __w_pdfjs_require__(53);\n  })();\n  (function checkNumberIsNaN() {\n    if (Number.isNaN) {\n      return;\n    }\n    Number.isNaN = __w_pdfjs_require__(55);\n  })();\n  (function checkNumberIsInteger() {\n    if (Number.isInteger) {\n      return;\n    }\n    Number.isInteger = __w_pdfjs_require__(57);\n  })();\n  (function checkPromise() {\n    if (globalScope.Promise) {\n      return;\n    }\n    globalScope.Promise = __w_pdfjs_require__(60);\n  })();\n  (function checkWeakMap() {\n    if (globalScope.WeakMap) {\n      return;\n    }\n    globalScope.WeakMap = __w_pdfjs_require__(95);\n  })();\n  (function checkObjectValues() {\n    if (Object.values) {\n      return;\n    }\n    Object.values = __w_pdfjs_require__(112);\n  })();\n}\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nmodule.exports = typeof window !== 'undefined' && window.Math === Math ? window : typeof global !== 'undefined' && global.Math === Math ? global : typeof self !== 'undefined' && self.Math === Math ? self : {};\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nmodule.exports = function isNodeJS() {\n  return (typeof process === 'undefined' ? 'undefined' : _typeof(process)) === 'object' && process + '' === '[object process]';\n};\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\n__w_pdfjs_require__(7);\nmodule.exports = __w_pdfjs_require__(10).String.includes;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar $export = __w_pdfjs_require__(8);\nvar context = __w_pdfjs_require__(26);\nvar INCLUDES = 'includes';\n$export($export.P + $export.F * __w_pdfjs_require__(33)(INCLUDES), 'String', {\n  includes: function includes(searchString) {\n    return !!~context(this, searchString, INCLUDES).indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar global = __w_pdfjs_require__(9);\nvar core = __w_pdfjs_require__(10);\nvar hide = __w_pdfjs_require__(11);\nvar redefine = __w_pdfjs_require__(21);\nvar ctx = __w_pdfjs_require__(24);\nvar PROTOTYPE = 'prototype';\nvar $export = function $export(type, name, source) {\n  var IS_FORCED = type & $export.F;\n  var IS_GLOBAL = type & $export.G;\n  var IS_STATIC = type & $export.S;\n  var IS_PROTO = type & $export.P;\n  var IS_BIND = type & $export.B;\n  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n  var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n  var key, own, out, exp;\n  if (IS_GLOBAL) source = name;\n  for (key in source) {\n    own = !IS_FORCED && target && target[key] !== undefined;\n    out = (own ? target : source)[key];\n    exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    if (target) redefine(target, key, out, type & $export.U);\n    if (exports[key] != out) hide(exports, key, exp);\n    if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n  }\n};\nglobal.core = core;\n$export.F = 1;\n$export.G = 2;\n$export.S = 4;\n$export.P = 8;\n$export.B = 16;\n$export.W = 32;\n$export.U = 64;\n$export.R = 128;\nmodule.exports = $export;\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();\nif (typeof __g == 'number') __g = global;\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar core = module.exports = { version: '2.5.7' };\nif (typeof __e == 'number') __e = core;\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar dP = __w_pdfjs_require__(12);\nvar createDesc = __w_pdfjs_require__(20);\nmodule.exports = __w_pdfjs_require__(16) ? function (object, key, value) {\n  return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar anObject = __w_pdfjs_require__(13);\nvar IE8_DOM_DEFINE = __w_pdfjs_require__(15);\nvar toPrimitive = __w_pdfjs_require__(19);\nvar dP = Object.defineProperty;\nexports.f = __w_pdfjs_require__(16) ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return dP(O, P, Attributes);\n  } catch (e) {}\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar isObject = __w_pdfjs_require__(14);\nmodule.exports = function (it) {\n  if (!isObject(it)) throw TypeError(it + ' is not an object!');\n  return it;\n};\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nmodule.exports = function (it) {\n  return (typeof it === 'undefined' ? 'undefined' : _typeof(it)) === 'object' ? it !== null : typeof it === 'function';\n};\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nmodule.exports = !__w_pdfjs_require__(16) && !__w_pdfjs_require__(17)(function () {\n  return Object.defineProperty(__w_pdfjs_require__(18)('div'), 'a', {\n    get: function get() {\n      return 7;\n    }\n  }).a != 7;\n});\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nmodule.exports = !__w_pdfjs_require__(17)(function () {\n  return Object.defineProperty({}, 'a', {\n    get: function get() {\n      return 7;\n    }\n  }).a != 7;\n});\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (e) {\n    return true;\n  }\n};\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar isObject = __w_pdfjs_require__(14);\nvar document = __w_pdfjs_require__(9).document;\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n  return is ? document.createElement(it) : {};\n};\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar isObject = __w_pdfjs_require__(14);\nmodule.exports = function (it, S) {\n  if (!isObject(it)) return it;\n  var fn, val;\n  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar global = __w_pdfjs_require__(9);\nvar hide = __w_pdfjs_require__(11);\nvar has = __w_pdfjs_require__(22);\nvar SRC = __w_pdfjs_require__(23)('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n__w_pdfjs_require__(10).inspectSource = function (it) {\n  return $toString.call(it);\n};\n(module.exports = function (O, key, val, safe) {\n  var isFunction = typeof val == 'function';\n  if (isFunction) has(val, 'name') || hide(val, 'name', key);\n  if (O[key] === val) return;\n  if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n  if (O === global) {\n    O[key] = val;\n  } else if (!safe) {\n    delete O[key];\n    hide(O, key, val);\n  } else if (O[key]) {\n    O[key] = val;\n  } else {\n    hide(O, key, val);\n  }\n})(Function.prototype, TO_STRING, function toString() {\n  return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar aFunction = __w_pdfjs_require__(25);\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 1:\n      return function (a) {\n        return fn.call(that, a);\n      };\n    case 2:\n      return function (a, b) {\n        return fn.call(that, a, b);\n      };\n    case 3:\n      return function (a, b, c) {\n        return fn.call(that, a, b, c);\n      };\n  }\n  return function () {\n    return fn.apply(that, arguments);\n  };\n};\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function (it) {\n  if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n  return it;\n};\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar isRegExp = __w_pdfjs_require__(27);\nvar defined = __w_pdfjs_require__(32);\nmodule.exports = function (that, searchString, NAME) {\n  if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n  return String(defined(that));\n};\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar isObject = __w_pdfjs_require__(14);\nvar cof = __w_pdfjs_require__(28);\nvar MATCH = __w_pdfjs_require__(29)('match');\nmodule.exports = function (it) {\n  var isRegExp;\n  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar toString = {}.toString;\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar store = __w_pdfjs_require__(30)('wks');\nvar uid = __w_pdfjs_require__(23);\nvar _Symbol = __w_pdfjs_require__(9).Symbol;\nvar USE_SYMBOL = typeof _Symbol == 'function';\nvar $exports = module.exports = function (name) {\n  return store[name] || (store[name] = USE_SYMBOL && _Symbol[name] || (USE_SYMBOL ? _Symbol : uid)('Symbol.' + name));\n};\n$exports.store = store;\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar core = __w_pdfjs_require__(10);\nvar global = __w_pdfjs_require__(9);\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: core.version,\n  mode: __w_pdfjs_require__(31) ? 'pure' : 'global',\n  copyright: '© 2018 Denis Pushkarev (zloirock.ru)'\n});\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nmodule.exports = false;\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on  \" + it);\n  return it;\n};\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar MATCH = __w_pdfjs_require__(29)('match');\nmodule.exports = function (KEY) {\n  var re = /./;\n  try {\n    '/./'[KEY](re);\n  } catch (e) {\n    try {\n      re[MATCH] = false;\n      return !'/./'[KEY](re);\n    } catch (f) {}\n  }\n  return true;\n};\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\n__w_pdfjs_require__(35);\nmodule.exports = __w_pdfjs_require__(10).Array.includes;\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar $export = __w_pdfjs_require__(8);\nvar $includes = __w_pdfjs_require__(36)(true);\n$export($export.P, 'Array', {\n  includes: function includes(el) {\n    return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n__w_pdfjs_require__(42)('includes');\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar toIObject = __w_pdfjs_require__(37);\nvar toLength = __w_pdfjs_require__(39);\nvar toAbsoluteIndex = __w_pdfjs_require__(41);\nmodule.exports = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      if (value != value) return true;\n    } else for (; length > index; index++) {\n      if (IS_INCLUDES || index in O) {\n        if (O[index] === el) return IS_INCLUDES || index || 0;\n      }\n    }return !IS_INCLUDES && -1;\n  };\n};\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar IObject = __w_pdfjs_require__(38);\nvar defined = __w_pdfjs_require__(32);\nmodule.exports = function (it) {\n  return IObject(defined(it));\n};\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar cof = __w_pdfjs_require__(28);\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar toInteger = __w_pdfjs_require__(40);\nvar min = Math.min;\nmodule.exports = function (it) {\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0;\n};\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar toInteger = __w_pdfjs_require__(40);\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar UNSCOPABLES = __w_pdfjs_require__(29)('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) __w_pdfjs_require__(11)(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n  ArrayProto[UNSCOPABLES][key] = true;\n};\n\n/***/ }),\n/* 43 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\n__w_pdfjs_require__(44);\nmodule.exports = __w_pdfjs_require__(10).Object.assign;\n\n/***/ }),\n/* 44 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar $export = __w_pdfjs_require__(8);\n$export($export.S + $export.F, 'Object', { assign: __w_pdfjs_require__(45) });\n\n/***/ }),\n/* 45 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar getKeys = __w_pdfjs_require__(46);\nvar gOPS = __w_pdfjs_require__(50);\nvar pIE = __w_pdfjs_require__(51);\nvar toObject = __w_pdfjs_require__(52);\nvar IObject = __w_pdfjs_require__(38);\nvar $assign = Object.assign;\nmodule.exports = !$assign || __w_pdfjs_require__(17)(function () {\n  var A = {};\n  var B = {};\n  var S = Symbol();\n  var K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function (k) {\n    B[k] = k;\n  });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) {\n  var T = toObject(target);\n  var aLen = arguments.length;\n  var index = 1;\n  var getSymbols = gOPS.f;\n  var isEnum = pIE.f;\n  while (aLen > index) {\n    var S = IObject(arguments[index++]);\n    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) {\n      if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n    }\n  }\n  return T;\n} : $assign;\n\n/***/ }),\n/* 46 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar $keys = __w_pdfjs_require__(47);\nvar enumBugKeys = __w_pdfjs_require__(49);\nmodule.exports = Object.keys || function keys(O) {\n  return $keys(O, enumBugKeys);\n};\n\n/***/ }),\n/* 47 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar has = __w_pdfjs_require__(22);\nvar toIObject = __w_pdfjs_require__(37);\nvar arrayIndexOf = __w_pdfjs_require__(36)(false);\nvar IE_PROTO = __w_pdfjs_require__(48)('IE_PROTO');\nmodule.exports = function (object, names) {\n  var O = toIObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) {\n    if (key != IE_PROTO) has(O, key) && result.push(key);\n  }while (names.length > i) {\n    if (has(O, key = names[i++])) {\n      ~arrayIndexOf(result, key) || result.push(key);\n    }\n  }return result;\n};\n\n/***/ }),\n/* 48 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar shared = __w_pdfjs_require__(30)('keys');\nvar uid = __w_pdfjs_require__(23);\nmodule.exports = function (key) {\n  return shared[key] || (shared[key] = uid(key));\n};\n\n/***/ }),\n/* 49 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nmodule.exports = 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'.split(',');\n\n/***/ }),\n/* 50 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nexports.f = Object.getOwnPropertySymbols;\n\n/***/ }),\n/* 51 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nexports.f = {}.propertyIsEnumerable;\n\n/***/ }),\n/* 52 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar defined = __w_pdfjs_require__(32);\nmodule.exports = function (it) {\n  return Object(defined(it));\n};\n\n/***/ }),\n/* 53 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\n__w_pdfjs_require__(54);\nmodule.exports = __w_pdfjs_require__(10).Math.log2;\n\n/***/ }),\n/* 54 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar $export = __w_pdfjs_require__(8);\n$export($export.S, 'Math', {\n  log2: function log2(x) {\n    return Math.log(x) / Math.LN2;\n  }\n});\n\n/***/ }),\n/* 55 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\n__w_pdfjs_require__(56);\nmodule.exports = __w_pdfjs_require__(10).Number.isNaN;\n\n/***/ }),\n/* 56 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar $export = __w_pdfjs_require__(8);\n$export($export.S, 'Number', {\n  isNaN: function isNaN(number) {\n    return number != number;\n  }\n});\n\n/***/ }),\n/* 57 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\n__w_pdfjs_require__(58);\nmodule.exports = __w_pdfjs_require__(10).Number.isInteger;\n\n/***/ }),\n/* 58 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar $export = __w_pdfjs_require__(8);\n$export($export.S, 'Number', { isInteger: __w_pdfjs_require__(59) });\n\n/***/ }),\n/* 59 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar isObject = __w_pdfjs_require__(14);\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n  return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n\n/***/ }),\n/* 60 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\n__w_pdfjs_require__(61);\n__w_pdfjs_require__(63);\n__w_pdfjs_require__(73);\n__w_pdfjs_require__(76);\n__w_pdfjs_require__(93);\n__w_pdfjs_require__(94);\nmodule.exports = __w_pdfjs_require__(10).Promise;\n\n/***/ }),\n/* 61 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar classof = __w_pdfjs_require__(62);\nvar test = {};\ntest[__w_pdfjs_require__(29)('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n  __w_pdfjs_require__(21)(Object.prototype, 'toString', function toString() {\n    return '[object ' + classof(this) + ']';\n  }, true);\n}\n\n/***/ }),\n/* 62 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar cof = __w_pdfjs_require__(28);\nvar TAG = __w_pdfjs_require__(29)('toStringTag');\nvar ARG = cof(function () {\n  return arguments;\n}()) == 'Arguments';\nvar tryGet = function tryGet(it, key) {\n  try {\n    return it[key];\n  } catch (e) {}\n};\nmodule.exports = function (it) {\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null' : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T : ARG ? cof(O) : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n\n/***/ }),\n/* 63 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar $at = __w_pdfjs_require__(64)(true);\n__w_pdfjs_require__(65)(String, 'String', function (iterated) {\n  this._t = String(iterated);\n  this._i = 0;\n}, function () {\n  var O = this._t;\n  var index = this._i;\n  var point;\n  if (index >= O.length) return {\n    value: undefined,\n    done: true\n  };\n  point = $at(O, index);\n  this._i += point.length;\n  return {\n    value: point,\n    done: false\n  };\n});\n\n/***/ }),\n/* 64 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar toInteger = __w_pdfjs_require__(40);\nvar defined = __w_pdfjs_require__(32);\nmodule.exports = function (TO_STRING) {\n  return function (that, pos) {\n    var s = String(defined(that));\n    var i = toInteger(pos);\n    var l = s.length;\n    var a, b;\n    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff ? TO_STRING ? s.charAt(i) : a : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n\n/***/ }),\n/* 65 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar LIBRARY = __w_pdfjs_require__(31);\nvar $export = __w_pdfjs_require__(8);\nvar redefine = __w_pdfjs_require__(21);\nvar hide = __w_pdfjs_require__(11);\nvar Iterators = __w_pdfjs_require__(66);\nvar $iterCreate = __w_pdfjs_require__(67);\nvar setToStringTag = __w_pdfjs_require__(71);\nvar getPrototypeOf = __w_pdfjs_require__(72);\nvar ITERATOR = __w_pdfjs_require__(29)('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys());\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar returnThis = function returnThis() {\n  return this;\n};\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function getMethod(kind) {\n    if (!BUGGY && kind in proto) return proto[kind];\n    switch (kind) {\n      case KEYS:\n        return function keys() {\n          return new Constructor(this, kind);\n        };\n      case VALUES:\n        return function values() {\n          return new Constructor(this, kind);\n        };\n    }\n    return function entries() {\n      return new Constructor(this, kind);\n    };\n  };\n  var TAG = NAME + ' Iterator';\n  var DEF_VALUES = DEFAULT == VALUES;\n  var VALUES_BUG = false;\n  var proto = Base.prototype;\n  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n  var $default = $native || getMethod(DEFAULT);\n  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n  var methods, key, IteratorPrototype;\n  if ($anyNative) {\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n      setToStringTag(IteratorPrototype, TAG, true);\n      if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  if (DEF_VALUES && $native && $native.name !== VALUES) {\n    VALUES_BUG = true;\n    $default = function values() {\n      return $native.call(this);\n    };\n  }\n  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n    hide(proto, ITERATOR, $default);\n  }\n  Iterators[NAME] = $default;\n  Iterators[TAG] = returnThis;\n  if (DEFAULT) {\n    methods = {\n      values: DEF_VALUES ? $default : getMethod(VALUES),\n      keys: IS_SET ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if (FORCED) for (key in methods) {\n      if (!(key in proto)) redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n\n/***/ }),\n/* 66 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nmodule.exports = {};\n\n/***/ }),\n/* 67 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar create = __w_pdfjs_require__(68);\nvar descriptor = __w_pdfjs_require__(20);\nvar setToStringTag = __w_pdfjs_require__(71);\nvar IteratorPrototype = {};\n__w_pdfjs_require__(11)(IteratorPrototype, __w_pdfjs_require__(29)('iterator'), function () {\n  return this;\n});\nmodule.exports = function (Constructor, NAME, next) {\n  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n\n/***/ }),\n/* 68 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar anObject = __w_pdfjs_require__(13);\nvar dPs = __w_pdfjs_require__(69);\nvar enumBugKeys = __w_pdfjs_require__(49);\nvar IE_PROTO = __w_pdfjs_require__(48)('IE_PROTO');\nvar Empty = function Empty() {};\nvar PROTOTYPE = 'prototype';\nvar _createDict = function createDict() {\n  var iframe = __w_pdfjs_require__(18)('iframe');\n  var i = enumBugKeys.length;\n  var lt = '<';\n  var gt = '>';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  __w_pdfjs_require__(70).appendChild(iframe);\n  iframe.src = 'javascript:';\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  _createDict = iframeDocument.F;\n  while (i--) {\n    delete _createDict[PROTOTYPE][enumBugKeys[i]];\n  }return _createDict();\n};\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty();\n    Empty[PROTOTYPE] = null;\n    result[IE_PROTO] = O;\n  } else result = _createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n\n/***/ }),\n/* 69 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar dP = __w_pdfjs_require__(12);\nvar anObject = __w_pdfjs_require__(13);\nvar getKeys = __w_pdfjs_require__(46);\nmodule.exports = __w_pdfjs_require__(16) ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = getKeys(Properties);\n  var length = keys.length;\n  var i = 0;\n  var P;\n  while (length > i) {\n    dP.f(O, P = keys[i++], Properties[P]);\n  }return O;\n};\n\n/***/ }),\n/* 70 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar document = __w_pdfjs_require__(9).document;\nmodule.exports = document && document.documentElement;\n\n/***/ }),\n/* 71 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar def = __w_pdfjs_require__(12).f;\nvar has = __w_pdfjs_require__(22);\nvar TAG = __w_pdfjs_require__(29)('toStringTag');\nmodule.exports = function (it, tag, stat) {\n  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, {\n    configurable: true,\n    value: tag\n  });\n};\n\n/***/ }),\n/* 72 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar has = __w_pdfjs_require__(22);\nvar toObject = __w_pdfjs_require__(52);\nvar IE_PROTO = __w_pdfjs_require__(48)('IE_PROTO');\nvar ObjectProto = Object.prototype;\nmodule.exports = Object.getPrototypeOf || function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  }\n  return O instanceof Object ? ObjectProto : null;\n};\n\n/***/ }),\n/* 73 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar $iterators = __w_pdfjs_require__(74);\nvar getKeys = __w_pdfjs_require__(46);\nvar redefine = __w_pdfjs_require__(21);\nvar global = __w_pdfjs_require__(9);\nvar hide = __w_pdfjs_require__(11);\nvar Iterators = __w_pdfjs_require__(66);\nvar wks = __w_pdfjs_require__(29);\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\nvar DOMIterables = {\n  CSSRuleList: true,\n  CSSStyleDeclaration: false,\n  CSSValueList: false,\n  ClientRectList: false,\n  DOMRectList: false,\n  DOMStringList: false,\n  DOMTokenList: true,\n  DataTransferItemList: false,\n  FileList: false,\n  HTMLAllCollection: false,\n  HTMLCollection: false,\n  HTMLFormElement: false,\n  HTMLSelectElement: false,\n  MediaList: true,\n  MimeTypeArray: false,\n  NamedNodeMap: false,\n  NodeList: true,\n  PaintRequestList: false,\n  Plugin: false,\n  PluginArray: false,\n  SVGLengthList: false,\n  SVGNumberList: false,\n  SVGPathSegList: false,\n  SVGPointList: false,\n  SVGStringList: false,\n  SVGTransformList: false,\n  SourceBufferList: false,\n  StyleSheetList: true,\n  TextTrackCueList: false,\n  TextTrackList: false,\n  TouchList: false\n};\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n  var NAME = collections[i];\n  var explicit = DOMIterables[NAME];\n  var Collection = global[NAME];\n  var proto = Collection && Collection.prototype;\n  var key;\n  if (proto) {\n    if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n    if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n    Iterators[NAME] = ArrayValues;\n    if (explicit) for (key in $iterators) {\n      if (!proto[key]) redefine(proto, key, $iterators[key], true);\n    }\n  }\n}\n\n/***/ }),\n/* 74 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar addToUnscopables = __w_pdfjs_require__(42);\nvar step = __w_pdfjs_require__(75);\nvar Iterators = __w_pdfjs_require__(66);\nvar toIObject = __w_pdfjs_require__(37);\nmodule.exports = __w_pdfjs_require__(65)(Array, 'Array', function (iterated, kind) {\n  this._t = toIObject(iterated);\n  this._i = 0;\n  this._k = kind;\n}, function () {\n  var O = this._t;\n  var kind = this._k;\n  var index = this._i++;\n  if (!O || index >= O.length) {\n    this._t = undefined;\n    return step(1);\n  }\n  if (kind == 'keys') return step(0, index);\n  if (kind == 'values') return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\nIterators.Arguments = Iterators.Array;\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n/***/ }),\n/* 75 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function (done, value) {\n  return {\n    value: value,\n    done: !!done\n  };\n};\n\n/***/ }),\n/* 76 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar LIBRARY = __w_pdfjs_require__(31);\nvar global = __w_pdfjs_require__(9);\nvar ctx = __w_pdfjs_require__(24);\nvar classof = __w_pdfjs_require__(62);\nvar $export = __w_pdfjs_require__(8);\nvar isObject = __w_pdfjs_require__(14);\nvar aFunction = __w_pdfjs_require__(25);\nvar anInstance = __w_pdfjs_require__(77);\nvar forOf = __w_pdfjs_require__(78);\nvar speciesConstructor = __w_pdfjs_require__(82);\nvar task = __w_pdfjs_require__(83).set;\nvar microtask = __w_pdfjs_require__(85)();\nvar newPromiseCapabilityModule = __w_pdfjs_require__(86);\nvar perform = __w_pdfjs_require__(87);\nvar userAgent = __w_pdfjs_require__(88);\nvar promiseResolve = __w_pdfjs_require__(89);\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function empty() {};\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\nvar USE_NATIVE = !!function () {\n  try {\n    var promise = $Promise.resolve(1);\n    var FakePromise = (promise.constructor = {})[__w_pdfjs_require__(29)('species')] = function (exec) {\n      exec(empty, empty);\n    };\n    return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise && v8.indexOf('6.6') !== 0 && userAgent.indexOf('Chrome/66') === -1;\n  } catch (e) {}\n}();\nvar isThenable = function isThenable(it) {\n  var then;\n  return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function notify(promise, isReject) {\n  if (promise._n) return;\n  promise._n = true;\n  var chain = promise._c;\n  microtask(function () {\n    var value = promise._v;\n    var ok = promise._s == 1;\n    var i = 0;\n    var run = function run(reaction) {\n      var handler = ok ? reaction.ok : reaction.fail;\n      var resolve = reaction.resolve;\n      var reject = reaction.reject;\n      var domain = reaction.domain;\n      var result, then, exited;\n      try {\n        if (handler) {\n          if (!ok) {\n            if (promise._h == 2) onHandleUnhandled(promise);\n            promise._h = 1;\n          }\n          if (handler === true) result = value;else {\n            if (domain) domain.enter();\n            result = handler(value);\n            if (domain) {\n              domain.exit();\n              exited = true;\n            }\n          }\n          if (result === reaction.promise) {\n            reject(TypeError('Promise-chain cycle'));\n          } else if (then = isThenable(result)) {\n            then.call(result, resolve, reject);\n          } else resolve(result);\n        } else reject(value);\n      } catch (e) {\n        if (domain && !exited) domain.exit();\n        reject(e);\n      }\n    };\n    while (chain.length > i) {\n      run(chain[i++]);\n    }promise._c = [];\n    promise._n = false;\n    if (isReject && !promise._h) onUnhandled(promise);\n  });\n};\nvar onUnhandled = function onUnhandled(promise) {\n  task.call(global, function () {\n    var value = promise._v;\n    var unhandled = isUnhandled(promise);\n    var result, handler, console;\n    if (unhandled) {\n      result = perform(function () {\n        if (isNode) {\n          process.emit('unhandledRejection', value, promise);\n        } else if (handler = global.onunhandledrejection) {\n          handler({\n            promise: promise,\n            reason: value\n          });\n        } else if ((console = global.console) && console.error) {\n          console.error('Unhandled promise rejection', value);\n        }\n      });\n      promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n    }\n    promise._a = undefined;\n    if (unhandled && result.e) throw result.v;\n  });\n};\nvar isUnhandled = function isUnhandled(promise) {\n  return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function onHandleUnhandled(promise) {\n  task.call(global, function () {\n    var handler;\n    if (isNode) {\n      process.emit('rejectionHandled', promise);\n    } else if (handler = global.onrejectionhandled) {\n      handler({\n        promise: promise,\n        reason: promise._v\n      });\n    }\n  });\n};\nvar $reject = function $reject(value) {\n  var promise = this;\n  if (promise._d) return;\n  promise._d = true;\n  promise = promise._w || promise;\n  promise._v = value;\n  promise._s = 2;\n  if (!promise._a) promise._a = promise._c.slice();\n  notify(promise, true);\n};\nvar $resolve = function $resolve(value) {\n  var promise = this;\n  var then;\n  if (promise._d) return;\n  promise._d = true;\n  promise = promise._w || promise;\n  try {\n    if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n    if (then = isThenable(value)) {\n      microtask(function () {\n        var wrapper = {\n          _w: promise,\n          _d: false\n        };\n        try {\n          then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n        } catch (e) {\n          $reject.call(wrapper, e);\n        }\n      });\n    } else {\n      promise._v = value;\n      promise._s = 1;\n      notify(promise, false);\n    }\n  } catch (e) {\n    $reject.call({\n      _w: promise,\n      _d: false\n    }, e);\n  }\n};\nif (!USE_NATIVE) {\n  $Promise = function Promise(executor) {\n    anInstance(this, $Promise, PROMISE, '_h');\n    aFunction(executor);\n    Internal.call(this);\n    try {\n      executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n    } catch (err) {\n      $reject.call(this, err);\n    }\n  };\n  Internal = function Promise(executor) {\n    this._c = [];\n    this._a = undefined;\n    this._s = 0;\n    this._d = false;\n    this._v = undefined;\n    this._h = 0;\n    this._n = false;\n  };\n  Internal.prototype = __w_pdfjs_require__(90)($Promise.prototype, {\n    then: function then(onFulfilled, onRejected) {\n      var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n      reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n      reaction.fail = typeof onRejected == 'function' && onRejected;\n      reaction.domain = isNode ? process.domain : undefined;\n      this._c.push(reaction);\n      if (this._a) this._a.push(reaction);\n      if (this._s) notify(this, false);\n      return reaction.promise;\n    },\n    'catch': function _catch(onRejected) {\n      return this.then(undefined, onRejected);\n    }\n  });\n  OwnPromiseCapability = function OwnPromiseCapability() {\n    var promise = new Internal();\n    this.promise = promise;\n    this.resolve = ctx($resolve, promise, 1);\n    this.reject = ctx($reject, promise, 1);\n  };\n  newPromiseCapabilityModule.f = newPromiseCapability = function newPromiseCapability(C) {\n    return C === $Promise || C === Wrapper ? new OwnPromiseCapability(C) : newGenericPromiseCapability(C);\n  };\n}\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\n__w_pdfjs_require__(71)($Promise, PROMISE);\n__w_pdfjs_require__(91)(PROMISE);\nWrapper = __w_pdfjs_require__(10)[PROMISE];\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n  reject: function reject(r) {\n    var capability = newPromiseCapability(this);\n    var $$reject = capability.reject;\n    $$reject(r);\n    return capability.promise;\n  }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n  resolve: function resolve(x) {\n    return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n  }\n});\n$export($export.S + $export.F * !(USE_NATIVE && __w_pdfjs_require__(92)(function (iter) {\n  $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n  all: function all(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var resolve = capability.resolve;\n    var reject = capability.reject;\n    var result = perform(function () {\n      var values = [];\n      var index = 0;\n      var remaining = 1;\n      forOf(iterable, false, function (promise) {\n        var $index = index++;\n        var alreadyCalled = false;\n        values.push(undefined);\n        remaining++;\n        C.resolve(promise).then(function (value) {\n          if (alreadyCalled) return;\n          alreadyCalled = true;\n          values[$index] = value;\n          --remaining || resolve(values);\n        }, reject);\n      });\n      --remaining || resolve(values);\n    });\n    if (result.e) reject(result.v);\n    return capability.promise;\n  },\n  race: function race(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var reject = capability.reject;\n    var result = perform(function () {\n      forOf(iterable, false, function (promise) {\n        C.resolve(promise).then(capability.resolve, reject);\n      });\n    });\n    if (result.e) reject(result.v);\n    return capability.promise;\n  }\n});\n\n/***/ }),\n/* 77 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function (it, Constructor, name, forbiddenField) {\n  if (!(it instanceof Constructor) || forbiddenField !== undefined && forbiddenField in it) {\n    throw TypeError(name + ': incorrect invocation!');\n  }\n  return it;\n};\n\n/***/ }),\n/* 78 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar ctx = __w_pdfjs_require__(24);\nvar call = __w_pdfjs_require__(79);\nvar isArrayIter = __w_pdfjs_require__(80);\nvar anObject = __w_pdfjs_require__(13);\nvar toLength = __w_pdfjs_require__(39);\nvar getIterFn = __w_pdfjs_require__(81);\nvar BREAK = {};\nvar RETURN = {};\nvar _exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n  var iterFn = ITERATOR ? function () {\n    return iterable;\n  } : getIterFn(iterable);\n  var f = ctx(fn, that, entries ? 2 : 1);\n  var index = 0;\n  var length, step, iterator, result;\n  if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n  if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n    result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n    if (result === BREAK || result === RETURN) return result;\n  } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n    result = call(iterator, f, step.value, entries);\n    if (result === BREAK || result === RETURN) return result;\n  }\n};\n_exports.BREAK = BREAK;\n_exports.RETURN = RETURN;\n\n/***/ }),\n/* 79 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar anObject = __w_pdfjs_require__(13);\nmodule.exports = function (iterator, fn, value, entries) {\n  try {\n    return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n  } catch (e) {\n    var ret = iterator['return'];\n    if (ret !== undefined) anObject(ret.call(iterator));\n    throw e;\n  }\n};\n\n/***/ }),\n/* 80 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar Iterators = __w_pdfjs_require__(66);\nvar ITERATOR = __w_pdfjs_require__(29)('iterator');\nvar ArrayProto = Array.prototype;\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n\n/***/ }),\n/* 81 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar classof = __w_pdfjs_require__(62);\nvar ITERATOR = __w_pdfjs_require__(29)('iterator');\nvar Iterators = __w_pdfjs_require__(66);\nmodule.exports = __w_pdfjs_require__(10).getIteratorMethod = function (it) {\n  if (it != undefined) return it[ITERATOR] || it['@@iterator'] || Iterators[classof(it)];\n};\n\n/***/ }),\n/* 82 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar anObject = __w_pdfjs_require__(13);\nvar aFunction = __w_pdfjs_require__(25);\nvar SPECIES = __w_pdfjs_require__(29)('species');\nmodule.exports = function (O, D) {\n  var C = anObject(O).constructor;\n  var S;\n  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n\n/***/ }),\n/* 83 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar ctx = __w_pdfjs_require__(24);\nvar invoke = __w_pdfjs_require__(84);\nvar html = __w_pdfjs_require__(70);\nvar cel = __w_pdfjs_require__(18);\nvar global = __w_pdfjs_require__(9);\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function run() {\n  var id = +this;\n  if (queue.hasOwnProperty(id)) {\n    var fn = queue[id];\n    delete queue[id];\n    fn();\n  }\n};\nvar listener = function listener(event) {\n  run.call(event.data);\n};\nif (!setTask || !clearTask) {\n  setTask = function setImmediate(fn) {\n    var args = [];\n    var i = 1;\n    while (arguments.length > i) {\n      args.push(arguments[i++]);\n    }queue[++counter] = function () {\n      invoke(typeof fn == 'function' ? fn : Function(fn), args);\n    };\n    defer(counter);\n    return counter;\n  };\n  clearTask = function clearImmediate(id) {\n    delete queue[id];\n  };\n  if (__w_pdfjs_require__(28)(process) == 'process') {\n    defer = function defer(id) {\n      process.nextTick(ctx(run, id, 1));\n    };\n  } else if (Dispatch && Dispatch.now) {\n    defer = function defer(id) {\n      Dispatch.now(ctx(run, id, 1));\n    };\n  } else if (MessageChannel) {\n    channel = new MessageChannel();\n    port = channel.port2;\n    channel.port1.onmessage = listener;\n    defer = ctx(port.postMessage, port, 1);\n  } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n    defer = function defer(id) {\n      global.postMessage(id + '', '*');\n    };\n    global.addEventListener('message', listener, false);\n  } else if (ONREADYSTATECHANGE in cel('script')) {\n    defer = function defer(id) {\n      html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n        html.removeChild(this);\n        run.call(id);\n      };\n    };\n  } else {\n    defer = function defer(id) {\n      setTimeout(ctx(run, id, 1), 0);\n    };\n  }\n}\nmodule.exports = {\n  set: setTask,\n  clear: clearTask\n};\n\n/***/ }),\n/* 84 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function (fn, args, that) {\n  var un = that === undefined;\n  switch (args.length) {\n    case 0:\n      return un ? fn() : fn.call(that);\n    case 1:\n      return un ? fn(args[0]) : fn.call(that, args[0]);\n    case 2:\n      return un ? fn(args[0], args[1]) : fn.call(that, args[0], args[1]);\n    case 3:\n      return un ? fn(args[0], args[1], args[2]) : fn.call(that, args[0], args[1], args[2]);\n    case 4:\n      return un ? fn(args[0], args[1], args[2], args[3]) : fn.call(that, args[0], args[1], args[2], args[3]);\n  }\n  return fn.apply(that, args);\n};\n\n/***/ }),\n/* 85 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar global = __w_pdfjs_require__(9);\nvar macrotask = __w_pdfjs_require__(83).set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = __w_pdfjs_require__(28)(process) == 'process';\nmodule.exports = function () {\n  var head, last, notify;\n  var flush = function flush() {\n    var parent, fn;\n    if (isNode && (parent = process.domain)) parent.exit();\n    while (head) {\n      fn = head.fn;\n      head = head.next;\n      try {\n        fn();\n      } catch (e) {\n        if (head) notify();else last = undefined;\n        throw e;\n      }\n    }\n    last = undefined;\n    if (parent) parent.enter();\n  };\n  if (isNode) {\n    notify = function notify() {\n      process.nextTick(flush);\n    };\n  } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n    var toggle = true;\n    var node = document.createTextNode('');\n    new Observer(flush).observe(node, { characterData: true });\n    notify = function notify() {\n      node.data = toggle = !toggle;\n    };\n  } else if (Promise && Promise.resolve) {\n    var promise = Promise.resolve(undefined);\n    notify = function notify() {\n      promise.then(flush);\n    };\n  } else {\n    notify = function notify() {\n      macrotask.call(global, flush);\n    };\n  }\n  return function (fn) {\n    var task = {\n      fn: fn,\n      next: undefined\n    };\n    if (last) last.next = task;\n    if (!head) {\n      head = task;\n      notify();\n    }\n    last = task;\n  };\n};\n\n/***/ }),\n/* 86 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar aFunction = __w_pdfjs_require__(25);\nfunction PromiseCapability(C) {\n  var resolve, reject;\n  this.promise = new C(function ($$resolve, $$reject) {\n    if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n    resolve = $$resolve;\n    reject = $$reject;\n  });\n  this.resolve = aFunction(resolve);\n  this.reject = aFunction(reject);\n}\nmodule.exports.f = function (C) {\n  return new PromiseCapability(C);\n};\n\n/***/ }),\n/* 87 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function (exec) {\n  try {\n    return {\n      e: false,\n      v: exec()\n    };\n  } catch (e) {\n    return {\n      e: true,\n      v: e\n    };\n  }\n};\n\n/***/ }),\n/* 88 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar global = __w_pdfjs_require__(9);\nvar navigator = global.navigator;\nmodule.exports = navigator && navigator.userAgent || '';\n\n/***/ }),\n/* 89 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar anObject = __w_pdfjs_require__(13);\nvar isObject = __w_pdfjs_require__(14);\nvar newPromiseCapability = __w_pdfjs_require__(86);\nmodule.exports = function (C, x) {\n  anObject(C);\n  if (isObject(x) && x.constructor === C) return x;\n  var promiseCapability = newPromiseCapability.f(C);\n  var resolve = promiseCapability.resolve;\n  resolve(x);\n  return promiseCapability.promise;\n};\n\n/***/ }),\n/* 90 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar redefine = __w_pdfjs_require__(21);\nmodule.exports = function (target, src, safe) {\n  for (var key in src) {\n    redefine(target, key, src[key], safe);\n  }return target;\n};\n\n/***/ }),\n/* 91 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar global = __w_pdfjs_require__(9);\nvar dP = __w_pdfjs_require__(12);\nvar DESCRIPTORS = __w_pdfjs_require__(16);\nvar SPECIES = __w_pdfjs_require__(29)('species');\nmodule.exports = function (KEY) {\n  var C = global[KEY];\n  if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n    configurable: true,\n    get: function get() {\n      return this;\n    }\n  });\n};\n\n/***/ }),\n/* 92 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar ITERATOR = __w_pdfjs_require__(29)('iterator');\nvar SAFE_CLOSING = false;\ntry {\n  var riter = [7][ITERATOR]();\n  riter['return'] = function () {\n    SAFE_CLOSING = true;\n  };\n  Array.from(riter, function () {\n    throw 2;\n  });\n} catch (e) {}\nmodule.exports = function (exec, skipClosing) {\n  if (!skipClosing && !SAFE_CLOSING) return false;\n  var safe = false;\n  try {\n    var arr = [7];\n    var iter = arr[ITERATOR]();\n    iter.next = function () {\n      return { done: safe = true };\n    };\n    arr[ITERATOR] = function () {\n      return iter;\n    };\n    exec(arr);\n  } catch (e) {}\n  return safe;\n};\n\n/***/ }),\n/* 93 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar $export = __w_pdfjs_require__(8);\nvar core = __w_pdfjs_require__(10);\nvar global = __w_pdfjs_require__(9);\nvar speciesConstructor = __w_pdfjs_require__(82);\nvar promiseResolve = __w_pdfjs_require__(89);\n$export($export.P + $export.R, 'Promise', {\n  'finally': function _finally(onFinally) {\n    var C = speciesConstructor(this, core.Promise || global.Promise);\n    var isFunction = typeof onFinally == 'function';\n    return this.then(isFunction ? function (x) {\n      return promiseResolve(C, onFinally()).then(function () {\n        return x;\n      });\n    } : onFinally, isFunction ? function (e) {\n      return promiseResolve(C, onFinally()).then(function () {\n        throw e;\n      });\n    } : onFinally);\n  }\n});\n\n/***/ }),\n/* 94 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar $export = __w_pdfjs_require__(8);\nvar newPromiseCapability = __w_pdfjs_require__(86);\nvar perform = __w_pdfjs_require__(87);\n$export($export.S, 'Promise', {\n  'try': function _try(callbackfn) {\n    var promiseCapability = newPromiseCapability.f(this);\n    var result = perform(callbackfn);\n    (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n    return promiseCapability.promise;\n  }\n});\n\n/***/ }),\n/* 95 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\n__w_pdfjs_require__(61);\n__w_pdfjs_require__(73);\n__w_pdfjs_require__(96);\n__w_pdfjs_require__(108);\n__w_pdfjs_require__(110);\nmodule.exports = __w_pdfjs_require__(10).WeakMap;\n\n/***/ }),\n/* 96 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar each = __w_pdfjs_require__(97)(0);\nvar redefine = __w_pdfjs_require__(21);\nvar meta = __w_pdfjs_require__(101);\nvar assign = __w_pdfjs_require__(45);\nvar weak = __w_pdfjs_require__(102);\nvar isObject = __w_pdfjs_require__(14);\nvar fails = __w_pdfjs_require__(17);\nvar validate = __w_pdfjs_require__(103);\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\nvar wrapper = function wrapper(get) {\n  return function WeakMap() {\n    return get(this, arguments.length > 0 ? arguments[0] : undefined);\n  };\n};\nvar methods = {\n  get: function get(key) {\n    if (isObject(key)) {\n      var data = getWeak(key);\n      if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n      return data ? data[this._i] : undefined;\n    }\n  },\n  set: function set(key, value) {\n    return weak.def(validate(this, WEAK_MAP), key, value);\n  }\n};\nvar $WeakMap = module.exports = __w_pdfjs_require__(104)(WEAK_MAP, wrapper, methods, weak, true, true);\nif (fails(function () {\n  return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7;\n})) {\n  InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n  assign(InternalMap.prototype, methods);\n  meta.NEED = true;\n  each(['delete', 'has', 'get', 'set'], function (key) {\n    var proto = $WeakMap.prototype;\n    var method = proto[key];\n    redefine(proto, key, function (a, b) {\n      if (isObject(a) && !isExtensible(a)) {\n        if (!this._f) this._f = new InternalMap();\n        var result = this._f[key](a, b);\n        return key == 'set' ? this : result;\n      }\n      return method.call(this, a, b);\n    });\n  });\n}\n\n/***/ }),\n/* 97 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar ctx = __w_pdfjs_require__(24);\nvar IObject = __w_pdfjs_require__(38);\nvar toObject = __w_pdfjs_require__(52);\nvar toLength = __w_pdfjs_require__(39);\nvar asc = __w_pdfjs_require__(98);\nmodule.exports = function (TYPE, $create) {\n  var IS_MAP = TYPE == 1;\n  var IS_FILTER = TYPE == 2;\n  var IS_SOME = TYPE == 3;\n  var IS_EVERY = TYPE == 4;\n  var IS_FIND_INDEX = TYPE == 6;\n  var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n  var create = $create || asc;\n  return function ($this, callbackfn, that) {\n    var O = toObject($this);\n    var self = IObject(O);\n    var f = ctx(callbackfn, that, 3);\n    var length = toLength(self.length);\n    var index = 0;\n    var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n    var val, res;\n    for (; length > index; index++) {\n      if (NO_HOLES || index in self) {\n        val = self[index];\n        res = f(val, index, O);\n        if (TYPE) {\n          if (IS_MAP) result[index] = res;else if (res) switch (TYPE) {\n            case 3:\n              return true;\n            case 5:\n              return val;\n            case 6:\n              return index;\n            case 2:\n              result.push(val);\n          } else if (IS_EVERY) return false;\n        }\n      }\n    }return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n  };\n};\n\n/***/ }),\n/* 98 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar speciesConstructor = __w_pdfjs_require__(99);\nmodule.exports = function (original, length) {\n  return new (speciesConstructor(original))(length);\n};\n\n/***/ }),\n/* 99 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar isObject = __w_pdfjs_require__(14);\nvar isArray = __w_pdfjs_require__(100);\nvar SPECIES = __w_pdfjs_require__(29)('species');\nmodule.exports = function (original) {\n  var C;\n  if (isArray(original)) {\n    C = original.constructor;\n    if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n    if (isObject(C)) {\n      C = C[SPECIES];\n      if (C === null) C = undefined;\n    }\n  }\n  return C === undefined ? Array : C;\n};\n\n/***/ }),\n/* 100 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar cof = __w_pdfjs_require__(28);\nmodule.exports = Array.isArray || function isArray(arg) {\n  return cof(arg) == 'Array';\n};\n\n/***/ }),\n/* 101 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar META = __w_pdfjs_require__(23)('meta');\nvar isObject = __w_pdfjs_require__(14);\nvar has = __w_pdfjs_require__(22);\nvar setDesc = __w_pdfjs_require__(12).f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n  return true;\n};\nvar FREEZE = !__w_pdfjs_require__(17)(function () {\n  return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function setMeta(it) {\n  setDesc(it, META, {\n    value: {\n      i: 'O' + ++id,\n      w: {}\n    }\n  });\n};\nvar fastKey = function fastKey(it, create) {\n  if (!isObject(it)) return (typeof it === 'undefined' ? 'undefined' : _typeof(it)) == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if (!has(it, META)) {\n    if (!isExtensible(it)) return 'F';\n    if (!create) return 'E';\n    setMeta(it);\n  }\n  return it[META].i;\n};\nvar getWeak = function getWeak(it, create) {\n  if (!has(it, META)) {\n    if (!isExtensible(it)) return true;\n    if (!create) return false;\n    setMeta(it);\n  }\n  return it[META].w;\n};\nvar onFreeze = function onFreeze(it) {\n  if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n  return it;\n};\nvar meta = module.exports = {\n  KEY: META,\n  NEED: false,\n  fastKey: fastKey,\n  getWeak: getWeak,\n  onFreeze: onFreeze\n};\n\n/***/ }),\n/* 102 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar redefineAll = __w_pdfjs_require__(90);\nvar getWeak = __w_pdfjs_require__(101).getWeak;\nvar anObject = __w_pdfjs_require__(13);\nvar isObject = __w_pdfjs_require__(14);\nvar anInstance = __w_pdfjs_require__(77);\nvar forOf = __w_pdfjs_require__(78);\nvar createArrayMethod = __w_pdfjs_require__(97);\nvar $has = __w_pdfjs_require__(22);\nvar validate = __w_pdfjs_require__(103);\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\nvar uncaughtFrozenStore = function uncaughtFrozenStore(that) {\n  return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function UncaughtFrozenStore() {\n  this.a = [];\n};\nvar findUncaughtFrozen = function findUncaughtFrozen(store, key) {\n  return arrayFind(store.a, function (it) {\n    return it[0] === key;\n  });\n};\nUncaughtFrozenStore.prototype = {\n  get: function get(key) {\n    var entry = findUncaughtFrozen(this, key);\n    if (entry) return entry[1];\n  },\n  has: function has(key) {\n    return !!findUncaughtFrozen(this, key);\n  },\n  set: function set(key, value) {\n    var entry = findUncaughtFrozen(this, key);\n    if (entry) entry[1] = value;else this.a.push([key, value]);\n  },\n  'delete': function _delete(key) {\n    var index = arrayFindIndex(this.a, function (it) {\n      return it[0] === key;\n    });\n    if (~index) this.a.splice(index, 1);\n    return !!~index;\n  }\n};\nmodule.exports = {\n  getConstructor: function getConstructor(wrapper, NAME, IS_MAP, ADDER) {\n    var C = wrapper(function (that, iterable) {\n      anInstance(that, C, NAME, '_i');\n      that._t = NAME;\n      that._i = id++;\n      that._l = undefined;\n      if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n    });\n    redefineAll(C.prototype, {\n      'delete': function _delete(key) {\n        if (!isObject(key)) return false;\n        var data = getWeak(key);\n        if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n        return data && $has(data, this._i) && delete data[this._i];\n      },\n      has: function has(key) {\n        if (!isObject(key)) return false;\n        var data = getWeak(key);\n        if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n        return data && $has(data, this._i);\n      }\n    });\n    return C;\n  },\n  def: function def(that, key, value) {\n    var data = getWeak(anObject(key), true);\n    if (data === true) uncaughtFrozenStore(that).set(key, value);else data[that._i] = value;\n    return that;\n  },\n  ufstore: uncaughtFrozenStore\n};\n\n/***/ }),\n/* 103 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar isObject = __w_pdfjs_require__(14);\nmodule.exports = function (it, TYPE) {\n  if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n  return it;\n};\n\n/***/ }),\n/* 104 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar global = __w_pdfjs_require__(9);\nvar $export = __w_pdfjs_require__(8);\nvar redefine = __w_pdfjs_require__(21);\nvar redefineAll = __w_pdfjs_require__(90);\nvar meta = __w_pdfjs_require__(101);\nvar forOf = __w_pdfjs_require__(78);\nvar anInstance = __w_pdfjs_require__(77);\nvar isObject = __w_pdfjs_require__(14);\nvar fails = __w_pdfjs_require__(17);\nvar $iterDetect = __w_pdfjs_require__(92);\nvar setToStringTag = __w_pdfjs_require__(71);\nvar inheritIfRequired = __w_pdfjs_require__(105);\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n  var Base = global[NAME];\n  var C = Base;\n  var ADDER = IS_MAP ? 'set' : 'add';\n  var proto = C && C.prototype;\n  var O = {};\n  var fixMethod = function fixMethod(KEY) {\n    var fn = proto[KEY];\n    redefine(proto, KEY, KEY == 'delete' ? function (a) {\n      return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n    } : KEY == 'has' ? function has(a) {\n      return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n    } : KEY == 'get' ? function get(a) {\n      return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n    } : KEY == 'add' ? function add(a) {\n      fn.call(this, a === 0 ? 0 : a);\n      return this;\n    } : function set(a, b) {\n      fn.call(this, a === 0 ? 0 : a, b);\n      return this;\n    });\n  };\n  if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n    new C().entries().next();\n  }))) {\n    C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n    redefineAll(C.prototype, methods);\n    meta.NEED = true;\n  } else {\n    var instance = new C();\n    var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n    var THROWS_ON_PRIMITIVES = fails(function () {\n      instance.has(1);\n    });\n    var ACCEPT_ITERABLES = $iterDetect(function (iter) {\n      new C(iter);\n    });\n    var BUGGY_ZERO = !IS_WEAK && fails(function () {\n      var $instance = new C();\n      var index = 5;\n      while (index--) {\n        $instance[ADDER](index, index);\n      }return !$instance.has(-0);\n    });\n    if (!ACCEPT_ITERABLES) {\n      C = wrapper(function (target, iterable) {\n        anInstance(target, C, NAME);\n        var that = inheritIfRequired(new Base(), target, C);\n        if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n        return that;\n      });\n      C.prototype = proto;\n      proto.constructor = C;\n    }\n    if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n      fixMethod('delete');\n      fixMethod('has');\n      IS_MAP && fixMethod('get');\n    }\n    if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n    if (IS_WEAK && proto.clear) delete proto.clear;\n  }\n  setToStringTag(C, NAME);\n  O[NAME] = C;\n  $export($export.G + $export.W + $export.F * (C != Base), O);\n  if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n  return C;\n};\n\n/***/ }),\n/* 105 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar isObject = __w_pdfjs_require__(14);\nvar setPrototypeOf = __w_pdfjs_require__(106).set;\nmodule.exports = function (that, target, C) {\n  var S = target.constructor;\n  var P;\n  if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n    setPrototypeOf(that, P);\n  }\n  return that;\n};\n\n/***/ }),\n/* 106 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar isObject = __w_pdfjs_require__(14);\nvar anObject = __w_pdfjs_require__(13);\nvar check = function check(O, proto) {\n  anObject(O);\n  if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n  set: Object.setPrototypeOf || ('__proto__' in {} ? function (test, buggy, set) {\n    try {\n      set = __w_pdfjs_require__(24)(Function.call, __w_pdfjs_require__(107).f(Object.prototype, '__proto__').set, 2);\n      set(test, []);\n      buggy = !(test instanceof Array);\n    } catch (e) {\n      buggy = true;\n    }\n    return function setPrototypeOf(O, proto) {\n      check(O, proto);\n      if (buggy) O.__proto__ = proto;else set(O, proto);\n      return O;\n    };\n  }({}, false) : undefined),\n  check: check\n};\n\n/***/ }),\n/* 107 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar pIE = __w_pdfjs_require__(51);\nvar createDesc = __w_pdfjs_require__(20);\nvar toIObject = __w_pdfjs_require__(37);\nvar toPrimitive = __w_pdfjs_require__(19);\nvar has = __w_pdfjs_require__(22);\nvar IE8_DOM_DEFINE = __w_pdfjs_require__(15);\nvar gOPD = Object.getOwnPropertyDescriptor;\nexports.f = __w_pdfjs_require__(16) ? gOPD : function getOwnPropertyDescriptor(O, P) {\n  O = toIObject(O);\n  P = toPrimitive(P, true);\n  if (IE8_DOM_DEFINE) try {\n    return gOPD(O, P);\n  } catch (e) {}\n  if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n\n/***/ }),\n/* 108 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\n__w_pdfjs_require__(109)('WeakMap');\n\n/***/ }),\n/* 109 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar $export = __w_pdfjs_require__(8);\nmodule.exports = function (COLLECTION) {\n  $export($export.S, COLLECTION, {\n    of: function of() {\n      var length = arguments.length;\n      var A = new Array(length);\n      while (length--) {\n        A[length] = arguments[length];\n      }return new this(A);\n    }\n  });\n};\n\n/***/ }),\n/* 110 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\n__w_pdfjs_require__(111)('WeakMap');\n\n/***/ }),\n/* 111 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar $export = __w_pdfjs_require__(8);\nvar aFunction = __w_pdfjs_require__(25);\nvar ctx = __w_pdfjs_require__(24);\nvar forOf = __w_pdfjs_require__(78);\nmodule.exports = function (COLLECTION) {\n  $export($export.S, COLLECTION, {\n    from: function from(source) {\n      var mapFn = arguments[1];\n      var mapping, A, n, cb;\n      aFunction(this);\n      mapping = mapFn !== undefined;\n      if (mapping) aFunction(mapFn);\n      if (source == undefined) return new this();\n      A = [];\n      if (mapping) {\n        n = 0;\n        cb = ctx(mapFn, arguments[2], 2);\n        forOf(source, false, function (nextItem) {\n          A.push(cb(nextItem, n++));\n        });\n      } else {\n        forOf(source, false, A.push, A);\n      }\n      return new this(A);\n    }\n  });\n};\n\n/***/ }),\n/* 112 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\n__w_pdfjs_require__(113);\nmodule.exports = __w_pdfjs_require__(10).Object.values;\n\n/***/ }),\n/* 113 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar $export = __w_pdfjs_require__(8);\nvar $values = __w_pdfjs_require__(114)(false);\n$export($export.S, 'Object', {\n  values: function values(it) {\n    return $values(it);\n  }\n});\n\n/***/ }),\n/* 114 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar getKeys = __w_pdfjs_require__(46);\nvar toIObject = __w_pdfjs_require__(37);\nvar isEnum = __w_pdfjs_require__(51).f;\nmodule.exports = function (isEntries) {\n  return function (it) {\n    var O = toIObject(it);\n    var keys = getKeys(O);\n    var length = keys.length;\n    var i = 0;\n    var result = [];\n    var key;\n    while (length > i) {\n      if (isEnum.call(O, key = keys[i++])) {\n        result.push(isEntries ? [key, O[key]] : O[key]);\n      }\n    }return result;\n  };\n};\n\n/***/ }),\n/* 115 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar isReadableStreamSupported = false;\nif (typeof ReadableStream !== 'undefined') {\n  try {\n    new ReadableStream({\n      start: function start(controller) {\n        controller.close();\n      }\n    });\n    isReadableStreamSupported = true;\n  } catch (e) {}\n}\nif (isReadableStreamSupported) {\n  exports.ReadableStream = ReadableStream;\n} else {\n  exports.ReadableStream = __w_pdfjs_require__(116).ReadableStream;\n}\n\n/***/ }),\n/* 116 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar _typeof2 = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n(function (e, a) {\n  for (var i in a) {\n    e[i] = a[i];\n  }\n})(exports, function (modules) {\n  var installedModules = {};\n  function __w_pdfjs_require__(moduleId) {\n    if (installedModules[moduleId]) return installedModules[moduleId].exports;\n    var module = installedModules[moduleId] = {\n      i: moduleId,\n      l: false,\n      exports: {}\n    };\n    modules[moduleId].call(module.exports, module, module.exports, __w_pdfjs_require__);\n    module.l = true;\n    return module.exports;\n  }\n  __w_pdfjs_require__.m = modules;\n  __w_pdfjs_require__.c = installedModules;\n  __w_pdfjs_require__.i = function (value) {\n    return value;\n  };\n  __w_pdfjs_require__.d = function (exports, name, getter) {\n    if (!__w_pdfjs_require__.o(exports, name)) {\n      Object.defineProperty(exports, name, {\n        configurable: false,\n        enumerable: true,\n        get: getter\n      });\n    }\n  };\n  __w_pdfjs_require__.n = function (module) {\n    var getter = module && module.__esModule ? function getDefault() {\n      return module['default'];\n    } : function getModuleExports() {\n      return module;\n    };\n    __w_pdfjs_require__.d(getter, 'a', getter);\n    return getter;\n  };\n  __w_pdfjs_require__.o = function (object, property) {\n    return Object.prototype.hasOwnProperty.call(object, property);\n  };\n  __w_pdfjs_require__.p = \"\";\n  return __w_pdfjs_require__(__w_pdfjs_require__.s = 7);\n}([function (module, exports, __w_pdfjs_require__) {\n  \"use strict\";\n\n  var _typeof = typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\" ? function (obj) {\n    return typeof obj === 'undefined' ? 'undefined' : _typeof2(obj);\n  } : function (obj) {\n    return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj === 'undefined' ? 'undefined' : _typeof2(obj);\n  };\n  var _require = __w_pdfjs_require__(1),\n      assert = _require.assert;\n  function IsPropertyKey(argument) {\n    return typeof argument === 'string' || (typeof argument === 'undefined' ? 'undefined' : _typeof(argument)) === 'symbol';\n  }\n  exports.typeIsObject = function (x) {\n    return (typeof x === 'undefined' ? 'undefined' : _typeof(x)) === 'object' && x !== null || typeof x === 'function';\n  };\n  exports.createDataProperty = function (o, p, v) {\n    assert(exports.typeIsObject(o));\n    Object.defineProperty(o, p, {\n      value: v,\n      writable: true,\n      enumerable: true,\n      configurable: true\n    });\n  };\n  exports.createArrayFromList = function (elements) {\n    return elements.slice();\n  };\n  exports.ArrayBufferCopy = function (dest, destOffset, src, srcOffset, n) {\n    new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n  };\n  exports.CreateIterResultObject = function (value, done) {\n    assert(typeof done === 'boolean');\n    var obj = {};\n    Object.defineProperty(obj, 'value', {\n      value: value,\n      enumerable: true,\n      writable: true,\n      configurable: true\n    });\n    Object.defineProperty(obj, 'done', {\n      value: done,\n      enumerable: true,\n      writable: true,\n      configurable: true\n    });\n    return obj;\n  };\n  exports.IsFiniteNonNegativeNumber = function (v) {\n    if (Number.isNaN(v)) {\n      return false;\n    }\n    if (v === Infinity) {\n      return false;\n    }\n    if (v < 0) {\n      return false;\n    }\n    return true;\n  };\n  function Call(F, V, args) {\n    if (typeof F !== 'function') {\n      throw new TypeError('Argument is not a function');\n    }\n    return Function.prototype.apply.call(F, V, args);\n  }\n  exports.InvokeOrNoop = function (O, P, args) {\n    assert(O !== undefined);\n    assert(IsPropertyKey(P));\n    assert(Array.isArray(args));\n    var method = O[P];\n    if (method === undefined) {\n      return undefined;\n    }\n    return Call(method, O, args);\n  };\n  exports.PromiseInvokeOrNoop = function (O, P, args) {\n    assert(O !== undefined);\n    assert(IsPropertyKey(P));\n    assert(Array.isArray(args));\n    try {\n      return Promise.resolve(exports.InvokeOrNoop(O, P, args));\n    } catch (returnValueE) {\n      return Promise.reject(returnValueE);\n    }\n  };\n  exports.PromiseInvokeOrPerformFallback = function (O, P, args, F, argsF) {\n    assert(O !== undefined);\n    assert(IsPropertyKey(P));\n    assert(Array.isArray(args));\n    assert(Array.isArray(argsF));\n    var method = void 0;\n    try {\n      method = O[P];\n    } catch (methodE) {\n      return Promise.reject(methodE);\n    }\n    if (method === undefined) {\n      return F.apply(null, argsF);\n    }\n    try {\n      return Promise.resolve(Call(method, O, args));\n    } catch (e) {\n      return Promise.reject(e);\n    }\n  };\n  exports.TransferArrayBuffer = function (O) {\n    return O.slice();\n  };\n  exports.ValidateAndNormalizeHighWaterMark = function (highWaterMark) {\n    highWaterMark = Number(highWaterMark);\n    if (Number.isNaN(highWaterMark) || highWaterMark < 0) {\n      throw new RangeError('highWaterMark property of a queuing strategy must be non-negative and non-NaN');\n    }\n    return highWaterMark;\n  };\n  exports.ValidateAndNormalizeQueuingStrategy = function (size, highWaterMark) {\n    if (size !== undefined && typeof size !== 'function') {\n      throw new TypeError('size property of a queuing strategy must be a function');\n    }\n    highWaterMark = exports.ValidateAndNormalizeHighWaterMark(highWaterMark);\n    return {\n      size: size,\n      highWaterMark: highWaterMark\n    };\n  };\n}, function (module, exports, __w_pdfjs_require__) {\n  \"use strict\";\n\n  function rethrowAssertionErrorRejection(e) {\n    if (e && e.constructor === AssertionError) {\n      setTimeout(function () {\n        throw e;\n      }, 0);\n    }\n  }\n  function AssertionError(message) {\n    this.name = 'AssertionError';\n    this.message = message || '';\n    this.stack = new Error().stack;\n  }\n  AssertionError.prototype = Object.create(Error.prototype);\n  AssertionError.prototype.constructor = AssertionError;\n  function assert(value, message) {\n    if (!value) {\n      throw new AssertionError(message);\n    }\n  }\n  module.exports = {\n    rethrowAssertionErrorRejection: rethrowAssertionErrorRejection,\n    AssertionError: AssertionError,\n    assert: assert\n  };\n}, function (module, exports, __w_pdfjs_require__) {\n  \"use strict\";\n\n  var _createClass = function () {\n    function defineProperties(target, props) {\n      for (var i = 0; i < props.length; i++) {\n        var descriptor = props[i];\n        descriptor.enumerable = descriptor.enumerable || false;\n        descriptor.configurable = true;\n        if (\"value\" in descriptor) descriptor.writable = true;\n        Object.defineProperty(target, descriptor.key, descriptor);\n      }\n    }\n    return function (Constructor, protoProps, staticProps) {\n      if (protoProps) defineProperties(Constructor.prototype, protoProps);\n      if (staticProps) defineProperties(Constructor, staticProps);\n      return Constructor;\n    };\n  }();\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n  var _require = __w_pdfjs_require__(0),\n      InvokeOrNoop = _require.InvokeOrNoop,\n      PromiseInvokeOrNoop = _require.PromiseInvokeOrNoop,\n      ValidateAndNormalizeQueuingStrategy = _require.ValidateAndNormalizeQueuingStrategy,\n      typeIsObject = _require.typeIsObject;\n  var _require2 = __w_pdfjs_require__(1),\n      assert = _require2.assert,\n      rethrowAssertionErrorRejection = _require2.rethrowAssertionErrorRejection;\n  var _require3 = __w_pdfjs_require__(3),\n      DequeueValue = _require3.DequeueValue,\n      EnqueueValueWithSize = _require3.EnqueueValueWithSize,\n      PeekQueueValue = _require3.PeekQueueValue,\n      ResetQueue = _require3.ResetQueue;\n  var WritableStream = function () {\n    function WritableStream() {\n      var underlyingSink = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n          size = _ref.size,\n          _ref$highWaterMark = _ref.highWaterMark,\n          highWaterMark = _ref$highWaterMark === undefined ? 1 : _ref$highWaterMark;\n      _classCallCheck(this, WritableStream);\n      this._state = 'writable';\n      this._storedError = undefined;\n      this._writer = undefined;\n      this._writableStreamController = undefined;\n      this._writeRequests = [];\n      this._inFlightWriteRequest = undefined;\n      this._closeRequest = undefined;\n      this._inFlightCloseRequest = undefined;\n      this._pendingAbortRequest = undefined;\n      this._backpressure = false;\n      var type = underlyingSink.type;\n      if (type !== undefined) {\n        throw new RangeError('Invalid type is specified');\n      }\n      this._writableStreamController = new WritableStreamDefaultController(this, underlyingSink, size, highWaterMark);\n      this._writableStreamController.__startSteps();\n    }\n    _createClass(WritableStream, [{\n      key: 'abort',\n      value: function abort(reason) {\n        if (IsWritableStream(this) === false) {\n          return Promise.reject(streamBrandCheckException('abort'));\n        }\n        if (IsWritableStreamLocked(this) === true) {\n          return Promise.reject(new TypeError('Cannot abort a stream that already has a writer'));\n        }\n        return WritableStreamAbort(this, reason);\n      }\n    }, {\n      key: 'getWriter',\n      value: function getWriter() {\n        if (IsWritableStream(this) === false) {\n          throw streamBrandCheckException('getWriter');\n        }\n        return AcquireWritableStreamDefaultWriter(this);\n      }\n    }, {\n      key: 'locked',\n      get: function get() {\n        if (IsWritableStream(this) === false) {\n          throw streamBrandCheckException('locked');\n        }\n        return IsWritableStreamLocked(this);\n      }\n    }]);\n    return WritableStream;\n  }();\n  module.exports = {\n    AcquireWritableStreamDefaultWriter: AcquireWritableStreamDefaultWriter,\n    IsWritableStream: IsWritableStream,\n    IsWritableStreamLocked: IsWritableStreamLocked,\n    WritableStream: WritableStream,\n    WritableStreamAbort: WritableStreamAbort,\n    WritableStreamDefaultControllerError: WritableStreamDefaultControllerError,\n    WritableStreamDefaultWriterCloseWithErrorPropagation: WritableStreamDefaultWriterCloseWithErrorPropagation,\n    WritableStreamDefaultWriterRelease: WritableStreamDefaultWriterRelease,\n    WritableStreamDefaultWriterWrite: WritableStreamDefaultWriterWrite,\n    WritableStreamCloseQueuedOrInFlight: WritableStreamCloseQueuedOrInFlight\n  };\n  function AcquireWritableStreamDefaultWriter(stream) {\n    return new WritableStreamDefaultWriter(stream);\n  }\n  function IsWritableStream(x) {\n    if (!typeIsObject(x)) {\n      return false;\n    }\n    if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n      return false;\n    }\n    return true;\n  }\n  function IsWritableStreamLocked(stream) {\n    assert(IsWritableStream(stream) === true, 'IsWritableStreamLocked should only be used on known writable streams');\n    if (stream._writer === undefined) {\n      return false;\n    }\n    return true;\n  }\n  function WritableStreamAbort(stream, reason) {\n    var state = stream._state;\n    if (state === 'closed') {\n      return Promise.resolve(undefined);\n    }\n    if (state === 'errored') {\n      return Promise.reject(stream._storedError);\n    }\n    var error = new TypeError('Requested to abort');\n    if (stream._pendingAbortRequest !== undefined) {\n      return Promise.reject(error);\n    }\n    assert(state === 'writable' || state === 'erroring', 'state must be writable or erroring');\n    var wasAlreadyErroring = false;\n    if (state === 'erroring') {\n      wasAlreadyErroring = true;\n      reason = undefined;\n    }\n    var promise = new Promise(function (resolve, reject) {\n      stream._pendingAbortRequest = {\n        _resolve: resolve,\n        _reject: reject,\n        _reason: reason,\n        _wasAlreadyErroring: wasAlreadyErroring\n      };\n    });\n    if (wasAlreadyErroring === false) {\n      WritableStreamStartErroring(stream, error);\n    }\n    return promise;\n  }\n  function WritableStreamAddWriteRequest(stream) {\n    assert(IsWritableStreamLocked(stream) === true);\n    assert(stream._state === 'writable');\n    var promise = new Promise(function (resolve, reject) {\n      var writeRequest = {\n        _resolve: resolve,\n        _reject: reject\n      };\n      stream._writeRequests.push(writeRequest);\n    });\n    return promise;\n  }\n  function WritableStreamDealWithRejection(stream, error) {\n    var state = stream._state;\n    if (state === 'writable') {\n      WritableStreamStartErroring(stream, error);\n      return;\n    }\n    assert(state === 'erroring');\n    WritableStreamFinishErroring(stream);\n  }\n  function WritableStreamStartErroring(stream, reason) {\n    assert(stream._storedError === undefined, 'stream._storedError === undefined');\n    assert(stream._state === 'writable', 'state must be writable');\n    var controller = stream._writableStreamController;\n    assert(controller !== undefined, 'controller must not be undefined');\n    stream._state = 'erroring';\n    stream._storedError = reason;\n    var writer = stream._writer;\n    if (writer !== undefined) {\n      WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n    }\n    if (WritableStreamHasOperationMarkedInFlight(stream) === false && controller._started === true) {\n      WritableStreamFinishErroring(stream);\n    }\n  }\n  function WritableStreamFinishErroring(stream) {\n    assert(stream._state === 'erroring', 'stream._state === erroring');\n    assert(WritableStreamHasOperationMarkedInFlight(stream) === false, 'WritableStreamHasOperationMarkedInFlight(stream) === false');\n    stream._state = 'errored';\n    stream._writableStreamController.__errorSteps();\n    var storedError = stream._storedError;\n    for (var i = 0; i < stream._writeRequests.length; i++) {\n      var writeRequest = stream._writeRequests[i];\n      writeRequest._reject(storedError);\n    }\n    stream._writeRequests = [];\n    if (stream._pendingAbortRequest === undefined) {\n      WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n      return;\n    }\n    var abortRequest = stream._pendingAbortRequest;\n    stream._pendingAbortRequest = undefined;\n    if (abortRequest._wasAlreadyErroring === true) {\n      abortRequest._reject(storedError);\n      WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n      return;\n    }\n    var promise = stream._writableStreamController.__abortSteps(abortRequest._reason);\n    promise.then(function () {\n      abortRequest._resolve();\n      WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n    }, function (reason) {\n      abortRequest._reject(reason);\n      WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n    });\n  }\n  function WritableStreamFinishInFlightWrite(stream) {\n    assert(stream._inFlightWriteRequest !== undefined);\n    stream._inFlightWriteRequest._resolve(undefined);\n    stream._inFlightWriteRequest = undefined;\n  }\n  function WritableStreamFinishInFlightWriteWithError(stream, error) {\n    assert(stream._inFlightWriteRequest !== undefined);\n    stream._inFlightWriteRequest._reject(error);\n    stream._inFlightWriteRequest = undefined;\n    assert(stream._state === 'writable' || stream._state === 'erroring');\n    WritableStreamDealWithRejection(stream, error);\n  }\n  function WritableStreamFinishInFlightClose(stream) {\n    assert(stream._inFlightCloseRequest !== undefined);\n    stream._inFlightCloseRequest._resolve(undefined);\n    stream._inFlightCloseRequest = undefined;\n    var state = stream._state;\n    assert(state === 'writable' || state === 'erroring');\n    if (state === 'erroring') {\n      stream._storedError = undefined;\n      if (stream._pendingAbortRequest !== undefined) {\n        stream._pendingAbortRequest._resolve();\n        stream._pendingAbortRequest = undefined;\n      }\n    }\n    stream._state = 'closed';\n    var writer = stream._writer;\n    if (writer !== undefined) {\n      defaultWriterClosedPromiseResolve(writer);\n    }\n    assert(stream._pendingAbortRequest === undefined, 'stream._pendingAbortRequest === undefined');\n    assert(stream._storedError === undefined, 'stream._storedError === undefined');\n  }\n  function WritableStreamFinishInFlightCloseWithError(stream, error) {\n    assert(stream._inFlightCloseRequest !== undefined);\n    stream._inFlightCloseRequest._reject(error);\n    stream._inFlightCloseRequest = undefined;\n    assert(stream._state === 'writable' || stream._state === 'erroring');\n    if (stream._pendingAbortRequest !== undefined) {\n      stream._pendingAbortRequest._reject(error);\n      stream._pendingAbortRequest = undefined;\n    }\n    WritableStreamDealWithRejection(stream, error);\n  }\n  function WritableStreamCloseQueuedOrInFlight(stream) {\n    if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n      return false;\n    }\n    return true;\n  }\n  function WritableStreamHasOperationMarkedInFlight(stream) {\n    if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n      return false;\n    }\n    return true;\n  }\n  function WritableStreamMarkCloseRequestInFlight(stream) {\n    assert(stream._inFlightCloseRequest === undefined);\n    assert(stream._closeRequest !== undefined);\n    stream._inFlightCloseRequest = stream._closeRequest;\n    stream._closeRequest = undefined;\n  }\n  function WritableStreamMarkFirstWriteRequestInFlight(stream) {\n    assert(stream._inFlightWriteRequest === undefined, 'there must be no pending write request');\n    assert(stream._writeRequests.length !== 0, 'writeRequests must not be empty');\n    stream._inFlightWriteRequest = stream._writeRequests.shift();\n  }\n  function WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream) {\n    assert(stream._state === 'errored', '_stream_.[[state]] is `\"errored\"`');\n    if (stream._closeRequest !== undefined) {\n      assert(stream._inFlightCloseRequest === undefined);\n      stream._closeRequest._reject(stream._storedError);\n      stream._closeRequest = undefined;\n    }\n    var writer = stream._writer;\n    if (writer !== undefined) {\n      defaultWriterClosedPromiseReject(writer, stream._storedError);\n      writer._closedPromise.catch(function () {});\n    }\n  }\n  function WritableStreamUpdateBackpressure(stream, backpressure) {\n    assert(stream._state === 'writable');\n    assert(WritableStreamCloseQueuedOrInFlight(stream) === false);\n    var writer = stream._writer;\n    if (writer !== undefined && backpressure !== stream._backpressure) {\n      if (backpressure === true) {\n        defaultWriterReadyPromiseReset(writer);\n      } else {\n        assert(backpressure === false);\n        defaultWriterReadyPromiseResolve(writer);\n      }\n    }\n    stream._backpressure = backpressure;\n  }\n  var WritableStreamDefaultWriter = function () {\n    function WritableStreamDefaultWriter(stream) {\n      _classCallCheck(this, WritableStreamDefaultWriter);\n      if (IsWritableStream(stream) === false) {\n        throw new TypeError('WritableStreamDefaultWriter can only be constructed with a WritableStream instance');\n      }\n      if (IsWritableStreamLocked(stream) === true) {\n        throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n      }\n      this._ownerWritableStream = stream;\n      stream._writer = this;\n      var state = stream._state;\n      if (state === 'writable') {\n        if (WritableStreamCloseQueuedOrInFlight(stream) === false && stream._backpressure === true) {\n          defaultWriterReadyPromiseInitialize(this);\n        } else {\n          defaultWriterReadyPromiseInitializeAsResolved(this);\n        }\n        defaultWriterClosedPromiseInitialize(this);\n      } else if (state === 'erroring') {\n        defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n        this._readyPromise.catch(function () {});\n        defaultWriterClosedPromiseInitialize(this);\n      } else if (state === 'closed') {\n        defaultWriterReadyPromiseInitializeAsResolved(this);\n        defaultWriterClosedPromiseInitializeAsResolved(this);\n      } else {\n        assert(state === 'errored', 'state must be errored');\n        var storedError = stream._storedError;\n        defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n        this._readyPromise.catch(function () {});\n        defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n        this._closedPromise.catch(function () {});\n      }\n    }\n    _createClass(WritableStreamDefaultWriter, [{\n      key: 'abort',\n      value: function abort(reason) {\n        if (IsWritableStreamDefaultWriter(this) === false) {\n          return Promise.reject(defaultWriterBrandCheckException('abort'));\n        }\n        if (this._ownerWritableStream === undefined) {\n          return Promise.reject(defaultWriterLockException('abort'));\n        }\n        return WritableStreamDefaultWriterAbort(this, reason);\n      }\n    }, {\n      key: 'close',\n      value: function close() {\n        if (IsWritableStreamDefaultWriter(this) === false) {\n          return Promise.reject(defaultWriterBrandCheckException('close'));\n        }\n        var stream = this._ownerWritableStream;\n        if (stream === undefined) {\n          return Promise.reject(defaultWriterLockException('close'));\n        }\n        if (WritableStreamCloseQueuedOrInFlight(stream) === true) {\n          return Promise.reject(new TypeError('cannot close an already-closing stream'));\n        }\n        return WritableStreamDefaultWriterClose(this);\n      }\n    }, {\n      key: 'releaseLock',\n      value: function releaseLock() {\n        if (IsWritableStreamDefaultWriter(this) === false) {\n          throw defaultWriterBrandCheckException('releaseLock');\n        }\n        var stream = this._ownerWritableStream;\n        if (stream === undefined) {\n          return;\n        }\n        assert(stream._writer !== undefined);\n        WritableStreamDefaultWriterRelease(this);\n      }\n    }, {\n      key: 'write',\n      value: function write(chunk) {\n        if (IsWritableStreamDefaultWriter(this) === false) {\n          return Promise.reject(defaultWriterBrandCheckException('write'));\n        }\n        if (this._ownerWritableStream === undefined) {\n          return Promise.reject(defaultWriterLockException('write to'));\n        }\n        return WritableStreamDefaultWriterWrite(this, chunk);\n      }\n    }, {\n      key: 'closed',\n      get: function get() {\n        if (IsWritableStreamDefaultWriter(this) === false) {\n          return Promise.reject(defaultWriterBrandCheckException('closed'));\n        }\n        return this._closedPromise;\n      }\n    }, {\n      key: 'desiredSize',\n      get: function get() {\n        if (IsWritableStreamDefaultWriter(this) === false) {\n          throw defaultWriterBrandCheckException('desiredSize');\n        }\n        if (this._ownerWritableStream === undefined) {\n          throw defaultWriterLockException('desiredSize');\n        }\n        return WritableStreamDefaultWriterGetDesiredSize(this);\n      }\n    }, {\n      key: 'ready',\n      get: function get() {\n        if (IsWritableStreamDefaultWriter(this) === false) {\n          return Promise.reject(defaultWriterBrandCheckException('ready'));\n        }\n        return this._readyPromise;\n      }\n    }]);\n    return WritableStreamDefaultWriter;\n  }();\n  function IsWritableStreamDefaultWriter(x) {\n    if (!typeIsObject(x)) {\n      return false;\n    }\n    if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n      return false;\n    }\n    return true;\n  }\n  function WritableStreamDefaultWriterAbort(writer, reason) {\n    var stream = writer._ownerWritableStream;\n    assert(stream !== undefined);\n    return WritableStreamAbort(stream, reason);\n  }\n  function WritableStreamDefaultWriterClose(writer) {\n    var stream = writer._ownerWritableStream;\n    assert(stream !== undefined);\n    var state = stream._state;\n    if (state === 'closed' || state === 'errored') {\n      return Promise.reject(new TypeError('The stream (in ' + state + ' state) is not in the writable state and cannot be closed'));\n    }\n    assert(state === 'writable' || state === 'erroring');\n    assert(WritableStreamCloseQueuedOrInFlight(stream) === false);\n    var promise = new Promise(function (resolve, reject) {\n      var closeRequest = {\n        _resolve: resolve,\n        _reject: reject\n      };\n      stream._closeRequest = closeRequest;\n    });\n    if (stream._backpressure === true && state === 'writable') {\n      defaultWriterReadyPromiseResolve(writer);\n    }\n    WritableStreamDefaultControllerClose(stream._writableStreamController);\n    return promise;\n  }\n  function WritableStreamDefaultWriterCloseWithErrorPropagation(writer) {\n    var stream = writer._ownerWritableStream;\n    assert(stream !== undefined);\n    var state = stream._state;\n    if (WritableStreamCloseQueuedOrInFlight(stream) === true || state === 'closed') {\n      return Promise.resolve();\n    }\n    if (state === 'errored') {\n      return Promise.reject(stream._storedError);\n    }\n    assert(state === 'writable' || state === 'erroring');\n    return WritableStreamDefaultWriterClose(writer);\n  }\n  function WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, error) {\n    if (writer._closedPromiseState === 'pending') {\n      defaultWriterClosedPromiseReject(writer, error);\n    } else {\n      defaultWriterClosedPromiseResetToRejected(writer, error);\n    }\n    writer._closedPromise.catch(function () {});\n  }\n  function WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, error) {\n    if (writer._readyPromiseState === 'pending') {\n      defaultWriterReadyPromiseReject(writer, error);\n    } else {\n      defaultWriterReadyPromiseResetToRejected(writer, error);\n    }\n    writer._readyPromise.catch(function () {});\n  }\n  function WritableStreamDefaultWriterGetDesiredSize(writer) {\n    var stream = writer._ownerWritableStream;\n    var state = stream._state;\n    if (state === 'errored' || state === 'erroring') {\n      return null;\n    }\n    if (state === 'closed') {\n      return 0;\n    }\n    return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n  }\n  function WritableStreamDefaultWriterRelease(writer) {\n    var stream = writer._ownerWritableStream;\n    assert(stream !== undefined);\n    assert(stream._writer === writer);\n    var releasedError = new TypeError('Writer was released and can no longer be used to monitor the stream\\'s closedness');\n    WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n    WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n    stream._writer = undefined;\n    writer._ownerWritableStream = undefined;\n  }\n  function WritableStreamDefaultWriterWrite(writer, chunk) {\n    var stream = writer._ownerWritableStream;\n    assert(stream !== undefined);\n    var controller = stream._writableStreamController;\n    var chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n    if (stream !== writer._ownerWritableStream) {\n      return Promise.reject(defaultWriterLockException('write to'));\n    }\n    var state = stream._state;\n    if (state === 'errored') {\n      return Promise.reject(stream._storedError);\n    }\n    if (WritableStreamCloseQueuedOrInFlight(stream) === true || state === 'closed') {\n      return Promise.reject(new TypeError('The stream is closing or closed and cannot be written to'));\n    }\n    if (state === 'erroring') {\n      return Promise.reject(stream._storedError);\n    }\n    assert(state === 'writable');\n    var promise = WritableStreamAddWriteRequest(stream);\n    WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n    return promise;\n  }\n  var WritableStreamDefaultController = function () {\n    function WritableStreamDefaultController(stream, underlyingSink, size, highWaterMark) {\n      _classCallCheck(this, WritableStreamDefaultController);\n      if (IsWritableStream(stream) === false) {\n        throw new TypeError('WritableStreamDefaultController can only be constructed with a WritableStream instance');\n      }\n      if (stream._writableStreamController !== undefined) {\n        throw new TypeError('WritableStreamDefaultController instances can only be created by the WritableStream constructor');\n      }\n      this._controlledWritableStream = stream;\n      this._underlyingSink = underlyingSink;\n      this._queue = undefined;\n      this._queueTotalSize = undefined;\n      ResetQueue(this);\n      this._started = false;\n      var normalizedStrategy = ValidateAndNormalizeQueuingStrategy(size, highWaterMark);\n      this._strategySize = normalizedStrategy.size;\n      this._strategyHWM = normalizedStrategy.highWaterMark;\n      var backpressure = WritableStreamDefaultControllerGetBackpressure(this);\n      WritableStreamUpdateBackpressure(stream, backpressure);\n    }\n    _createClass(WritableStreamDefaultController, [{\n      key: 'error',\n      value: function error(e) {\n        if (IsWritableStreamDefaultController(this) === false) {\n          throw new TypeError('WritableStreamDefaultController.prototype.error can only be used on a WritableStreamDefaultController');\n        }\n        var state = this._controlledWritableStream._state;\n        if (state !== 'writable') {\n          return;\n        }\n        WritableStreamDefaultControllerError(this, e);\n      }\n    }, {\n      key: '__abortSteps',\n      value: function __abortSteps(reason) {\n        return PromiseInvokeOrNoop(this._underlyingSink, 'abort', [reason]);\n      }\n    }, {\n      key: '__errorSteps',\n      value: function __errorSteps() {\n        ResetQueue(this);\n      }\n    }, {\n      key: '__startSteps',\n      value: function __startSteps() {\n        var _this = this;\n        var startResult = InvokeOrNoop(this._underlyingSink, 'start', [this]);\n        var stream = this._controlledWritableStream;\n        Promise.resolve(startResult).then(function () {\n          assert(stream._state === 'writable' || stream._state === 'erroring');\n          _this._started = true;\n          WritableStreamDefaultControllerAdvanceQueueIfNeeded(_this);\n        }, function (r) {\n          assert(stream._state === 'writable' || stream._state === 'erroring');\n          _this._started = true;\n          WritableStreamDealWithRejection(stream, r);\n        }).catch(rethrowAssertionErrorRejection);\n      }\n    }]);\n    return WritableStreamDefaultController;\n  }();\n  function WritableStreamDefaultControllerClose(controller) {\n    EnqueueValueWithSize(controller, 'close', 0);\n    WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n  }\n  function WritableStreamDefaultControllerGetChunkSize(controller, chunk) {\n    var strategySize = controller._strategySize;\n    if (strategySize === undefined) {\n      return 1;\n    }\n    try {\n      return strategySize(chunk);\n    } catch (chunkSizeE) {\n      WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n      return 1;\n    }\n  }\n  function WritableStreamDefaultControllerGetDesiredSize(controller) {\n    return controller._strategyHWM - controller._queueTotalSize;\n  }\n  function WritableStreamDefaultControllerWrite(controller, chunk, chunkSize) {\n    var writeRecord = { chunk: chunk };\n    try {\n      EnqueueValueWithSize(controller, writeRecord, chunkSize);\n    } catch (enqueueE) {\n      WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n      return;\n    }\n    var stream = controller._controlledWritableStream;\n    if (WritableStreamCloseQueuedOrInFlight(stream) === false && stream._state === 'writable') {\n      var backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n      WritableStreamUpdateBackpressure(stream, backpressure);\n    }\n    WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n  }\n  function IsWritableStreamDefaultController(x) {\n    if (!typeIsObject(x)) {\n      return false;\n    }\n    if (!Object.prototype.hasOwnProperty.call(x, '_underlyingSink')) {\n      return false;\n    }\n    return true;\n  }\n  function WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller) {\n    var stream = controller._controlledWritableStream;\n    if (controller._started === false) {\n      return;\n    }\n    if (stream._inFlightWriteRequest !== undefined) {\n      return;\n    }\n    var state = stream._state;\n    if (state === 'closed' || state === 'errored') {\n      return;\n    }\n    if (state === 'erroring') {\n      WritableStreamFinishErroring(stream);\n      return;\n    }\n    if (controller._queue.length === 0) {\n      return;\n    }\n    var writeRecord = PeekQueueValue(controller);\n    if (writeRecord === 'close') {\n      WritableStreamDefaultControllerProcessClose(controller);\n    } else {\n      WritableStreamDefaultControllerProcessWrite(controller, writeRecord.chunk);\n    }\n  }\n  function WritableStreamDefaultControllerErrorIfNeeded(controller, error) {\n    if (controller._controlledWritableStream._state === 'writable') {\n      WritableStreamDefaultControllerError(controller, error);\n    }\n  }\n  function WritableStreamDefaultControllerProcessClose(controller) {\n    var stream = controller._controlledWritableStream;\n    WritableStreamMarkCloseRequestInFlight(stream);\n    DequeueValue(controller);\n    assert(controller._queue.length === 0, 'queue must be empty once the final write record is dequeued');\n    var sinkClosePromise = PromiseInvokeOrNoop(controller._underlyingSink, 'close', []);\n    sinkClosePromise.then(function () {\n      WritableStreamFinishInFlightClose(stream);\n    }, function (reason) {\n      WritableStreamFinishInFlightCloseWithError(stream, reason);\n    }).catch(rethrowAssertionErrorRejection);\n  }\n  function WritableStreamDefaultControllerProcessWrite(controller, chunk) {\n    var stream = controller._controlledWritableStream;\n    WritableStreamMarkFirstWriteRequestInFlight(stream);\n    var sinkWritePromise = PromiseInvokeOrNoop(controller._underlyingSink, 'write', [chunk, controller]);\n    sinkWritePromise.then(function () {\n      WritableStreamFinishInFlightWrite(stream);\n      var state = stream._state;\n      assert(state === 'writable' || state === 'erroring');\n      DequeueValue(controller);\n      if (WritableStreamCloseQueuedOrInFlight(stream) === false && state === 'writable') {\n        var backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n        WritableStreamUpdateBackpressure(stream, backpressure);\n      }\n      WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n    }, function (reason) {\n      WritableStreamFinishInFlightWriteWithError(stream, reason);\n    }).catch(rethrowAssertionErrorRejection);\n  }\n  function WritableStreamDefaultControllerGetBackpressure(controller) {\n    var desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n    return desiredSize <= 0;\n  }\n  function WritableStreamDefaultControllerError(controller, error) {\n    var stream = controller._controlledWritableStream;\n    assert(stream._state === 'writable');\n    WritableStreamStartErroring(stream, error);\n  }\n  function streamBrandCheckException(name) {\n    return new TypeError('WritableStream.prototype.' + name + ' can only be used on a WritableStream');\n  }\n  function defaultWriterBrandCheckException(name) {\n    return new TypeError('WritableStreamDefaultWriter.prototype.' + name + ' can only be used on a WritableStreamDefaultWriter');\n  }\n  function defaultWriterLockException(name) {\n    return new TypeError('Cannot ' + name + ' a stream using a released writer');\n  }\n  function defaultWriterClosedPromiseInitialize(writer) {\n    writer._closedPromise = new Promise(function (resolve, reject) {\n      writer._closedPromise_resolve = resolve;\n      writer._closedPromise_reject = reject;\n      writer._closedPromiseState = 'pending';\n    });\n  }\n  function defaultWriterClosedPromiseInitializeAsRejected(writer, reason) {\n    writer._closedPromise = Promise.reject(reason);\n    writer._closedPromise_resolve = undefined;\n    writer._closedPromise_reject = undefined;\n    writer._closedPromiseState = 'rejected';\n  }\n  function defaultWriterClosedPromiseInitializeAsResolved(writer) {\n    writer._closedPromise = Promise.resolve(undefined);\n    writer._closedPromise_resolve = undefined;\n    writer._closedPromise_reject = undefined;\n    writer._closedPromiseState = 'resolved';\n  }\n  function defaultWriterClosedPromiseReject(writer, reason) {\n    assert(writer._closedPromise_resolve !== undefined, 'writer._closedPromise_resolve !== undefined');\n    assert(writer._closedPromise_reject !== undefined, 'writer._closedPromise_reject !== undefined');\n    assert(writer._closedPromiseState === 'pending', 'writer._closedPromiseState is pending');\n    writer._closedPromise_reject(reason);\n    writer._closedPromise_resolve = undefined;\n    writer._closedPromise_reject = undefined;\n    writer._closedPromiseState = 'rejected';\n  }\n  function defaultWriterClosedPromiseResetToRejected(writer, reason) {\n    assert(writer._closedPromise_resolve === undefined, 'writer._closedPromise_resolve === undefined');\n    assert(writer._closedPromise_reject === undefined, 'writer._closedPromise_reject === undefined');\n    assert(writer._closedPromiseState !== 'pending', 'writer._closedPromiseState is not pending');\n    writer._closedPromise = Promise.reject(reason);\n    writer._closedPromiseState = 'rejected';\n  }\n  function defaultWriterClosedPromiseResolve(writer) {\n    assert(writer._closedPromise_resolve !== undefined, 'writer._closedPromise_resolve !== undefined');\n    assert(writer._closedPromise_reject !== undefined, 'writer._closedPromise_reject !== undefined');\n    assert(writer._closedPromiseState === 'pending', 'writer._closedPromiseState is pending');\n    writer._closedPromise_resolve(undefined);\n    writer._closedPromise_resolve = undefined;\n    writer._closedPromise_reject = undefined;\n    writer._closedPromiseState = 'resolved';\n  }\n  function defaultWriterReadyPromiseInitialize(writer) {\n    writer._readyPromise = new Promise(function (resolve, reject) {\n      writer._readyPromise_resolve = resolve;\n      writer._readyPromise_reject = reject;\n    });\n    writer._readyPromiseState = 'pending';\n  }\n  function defaultWriterReadyPromiseInitializeAsRejected(writer, reason) {\n    writer._readyPromise = Promise.reject(reason);\n    writer._readyPromise_resolve = undefined;\n    writer._readyPromise_reject = undefined;\n    writer._readyPromiseState = 'rejected';\n  }\n  function defaultWriterReadyPromiseInitializeAsResolved(writer) {\n    writer._readyPromise = Promise.resolve(undefined);\n    writer._readyPromise_resolve = undefined;\n    writer._readyPromise_reject = undefined;\n    writer._readyPromiseState = 'fulfilled';\n  }\n  function defaultWriterReadyPromiseReject(writer, reason) {\n    assert(writer._readyPromise_resolve !== undefined, 'writer._readyPromise_resolve !== undefined');\n    assert(writer._readyPromise_reject !== undefined, 'writer._readyPromise_reject !== undefined');\n    writer._readyPromise_reject(reason);\n    writer._readyPromise_resolve = undefined;\n    writer._readyPromise_reject = undefined;\n    writer._readyPromiseState = 'rejected';\n  }\n  function defaultWriterReadyPromiseReset(writer) {\n    assert(writer._readyPromise_resolve === undefined, 'writer._readyPromise_resolve === undefined');\n    assert(writer._readyPromise_reject === undefined, 'writer._readyPromise_reject === undefined');\n    writer._readyPromise = new Promise(function (resolve, reject) {\n      writer._readyPromise_resolve = resolve;\n      writer._readyPromise_reject = reject;\n    });\n    writer._readyPromiseState = 'pending';\n  }\n  function defaultWriterReadyPromiseResetToRejected(writer, reason) {\n    assert(writer._readyPromise_resolve === undefined, 'writer._readyPromise_resolve === undefined');\n    assert(writer._readyPromise_reject === undefined, 'writer._readyPromise_reject === undefined');\n    writer._readyPromise = Promise.reject(reason);\n    writer._readyPromiseState = 'rejected';\n  }\n  function defaultWriterReadyPromiseResolve(writer) {\n    assert(writer._readyPromise_resolve !== undefined, 'writer._readyPromise_resolve !== undefined');\n    assert(writer._readyPromise_reject !== undefined, 'writer._readyPromise_reject !== undefined');\n    writer._readyPromise_resolve(undefined);\n    writer._readyPromise_resolve = undefined;\n    writer._readyPromise_reject = undefined;\n    writer._readyPromiseState = 'fulfilled';\n  }\n}, function (module, exports, __w_pdfjs_require__) {\n  \"use strict\";\n\n  var _require = __w_pdfjs_require__(0),\n      IsFiniteNonNegativeNumber = _require.IsFiniteNonNegativeNumber;\n  var _require2 = __w_pdfjs_require__(1),\n      assert = _require2.assert;\n  exports.DequeueValue = function (container) {\n    assert('_queue' in container && '_queueTotalSize' in container, 'Spec-level failure: DequeueValue should only be used on containers with [[queue]] and [[queueTotalSize]].');\n    assert(container._queue.length > 0, 'Spec-level failure: should never dequeue from an empty queue.');\n    var pair = container._queue.shift();\n    container._queueTotalSize -= pair.size;\n    if (container._queueTotalSize < 0) {\n      container._queueTotalSize = 0;\n    }\n    return pair.value;\n  };\n  exports.EnqueueValueWithSize = function (container, value, size) {\n    assert('_queue' in container && '_queueTotalSize' in container, 'Spec-level failure: EnqueueValueWithSize should only be used on containers with [[queue]] and ' + '[[queueTotalSize]].');\n    size = Number(size);\n    if (!IsFiniteNonNegativeNumber(size)) {\n      throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n    }\n    container._queue.push({\n      value: value,\n      size: size\n    });\n    container._queueTotalSize += size;\n  };\n  exports.PeekQueueValue = function (container) {\n    assert('_queue' in container && '_queueTotalSize' in container, 'Spec-level failure: PeekQueueValue should only be used on containers with [[queue]] and [[queueTotalSize]].');\n    assert(container._queue.length > 0, 'Spec-level failure: should never peek at an empty queue.');\n    var pair = container._queue[0];\n    return pair.value;\n  };\n  exports.ResetQueue = function (container) {\n    assert('_queue' in container && '_queueTotalSize' in container, 'Spec-level failure: ResetQueue should only be used on containers with [[queue]] and [[queueTotalSize]].');\n    container._queue = [];\n    container._queueTotalSize = 0;\n  };\n}, function (module, exports, __w_pdfjs_require__) {\n  \"use strict\";\n\n  var _createClass = function () {\n    function defineProperties(target, props) {\n      for (var i = 0; i < props.length; i++) {\n        var descriptor = props[i];\n        descriptor.enumerable = descriptor.enumerable || false;\n        descriptor.configurable = true;\n        if (\"value\" in descriptor) descriptor.writable = true;\n        Object.defineProperty(target, descriptor.key, descriptor);\n      }\n    }\n    return function (Constructor, protoProps, staticProps) {\n      if (protoProps) defineProperties(Constructor.prototype, protoProps);\n      if (staticProps) defineProperties(Constructor, staticProps);\n      return Constructor;\n    };\n  }();\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n  var _require = __w_pdfjs_require__(0),\n      ArrayBufferCopy = _require.ArrayBufferCopy,\n      CreateIterResultObject = _require.CreateIterResultObject,\n      IsFiniteNonNegativeNumber = _require.IsFiniteNonNegativeNumber,\n      InvokeOrNoop = _require.InvokeOrNoop,\n      PromiseInvokeOrNoop = _require.PromiseInvokeOrNoop,\n      TransferArrayBuffer = _require.TransferArrayBuffer,\n      ValidateAndNormalizeQueuingStrategy = _require.ValidateAndNormalizeQueuingStrategy,\n      ValidateAndNormalizeHighWaterMark = _require.ValidateAndNormalizeHighWaterMark;\n  var _require2 = __w_pdfjs_require__(0),\n      createArrayFromList = _require2.createArrayFromList,\n      createDataProperty = _require2.createDataProperty,\n      typeIsObject = _require2.typeIsObject;\n  var _require3 = __w_pdfjs_require__(1),\n      assert = _require3.assert,\n      rethrowAssertionErrorRejection = _require3.rethrowAssertionErrorRejection;\n  var _require4 = __w_pdfjs_require__(3),\n      DequeueValue = _require4.DequeueValue,\n      EnqueueValueWithSize = _require4.EnqueueValueWithSize,\n      ResetQueue = _require4.ResetQueue;\n  var _require5 = __w_pdfjs_require__(2),\n      AcquireWritableStreamDefaultWriter = _require5.AcquireWritableStreamDefaultWriter,\n      IsWritableStream = _require5.IsWritableStream,\n      IsWritableStreamLocked = _require5.IsWritableStreamLocked,\n      WritableStreamAbort = _require5.WritableStreamAbort,\n      WritableStreamDefaultWriterCloseWithErrorPropagation = _require5.WritableStreamDefaultWriterCloseWithErrorPropagation,\n      WritableStreamDefaultWriterRelease = _require5.WritableStreamDefaultWriterRelease,\n      WritableStreamDefaultWriterWrite = _require5.WritableStreamDefaultWriterWrite,\n      WritableStreamCloseQueuedOrInFlight = _require5.WritableStreamCloseQueuedOrInFlight;\n  var ReadableStream = function () {\n    function ReadableStream() {\n      var underlyingSource = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n          size = _ref.size,\n          highWaterMark = _ref.highWaterMark;\n      _classCallCheck(this, ReadableStream);\n      this._state = 'readable';\n      this._reader = undefined;\n      this._storedError = undefined;\n      this._disturbed = false;\n      this._readableStreamController = undefined;\n      var type = underlyingSource.type;\n      var typeString = String(type);\n      if (typeString === 'bytes') {\n        if (highWaterMark === undefined) {\n          highWaterMark = 0;\n        }\n        this._readableStreamController = new ReadableByteStreamController(this, underlyingSource, highWaterMark);\n      } else if (type === undefined) {\n        if (highWaterMark === undefined) {\n          highWaterMark = 1;\n        }\n        this._readableStreamController = new ReadableStreamDefaultController(this, underlyingSource, size, highWaterMark);\n      } else {\n        throw new RangeError('Invalid type is specified');\n      }\n    }\n    _createClass(ReadableStream, [{\n      key: 'cancel',\n      value: function cancel(reason) {\n        if (IsReadableStream(this) === false) {\n          return Promise.reject(streamBrandCheckException('cancel'));\n        }\n        if (IsReadableStreamLocked(this) === true) {\n          return Promise.reject(new TypeError('Cannot cancel a stream that already has a reader'));\n        }\n        return ReadableStreamCancel(this, reason);\n      }\n    }, {\n      key: 'getReader',\n      value: function getReader() {\n        var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n            mode = _ref2.mode;\n        if (IsReadableStream(this) === false) {\n          throw streamBrandCheckException('getReader');\n        }\n        if (mode === undefined) {\n          return AcquireReadableStreamDefaultReader(this);\n        }\n        mode = String(mode);\n        if (mode === 'byob') {\n          return AcquireReadableStreamBYOBReader(this);\n        }\n        throw new RangeError('Invalid mode is specified');\n      }\n    }, {\n      key: 'pipeThrough',\n      value: function pipeThrough(_ref3, options) {\n        var writable = _ref3.writable,\n            readable = _ref3.readable;\n        var promise = this.pipeTo(writable, options);\n        ifIsObjectAndHasAPromiseIsHandledInternalSlotSetPromiseIsHandledToTrue(promise);\n        return readable;\n      }\n    }, {\n      key: 'pipeTo',\n      value: function pipeTo(dest) {\n        var _this = this;\n        var _ref4 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n            preventClose = _ref4.preventClose,\n            preventAbort = _ref4.preventAbort,\n            preventCancel = _ref4.preventCancel;\n        if (IsReadableStream(this) === false) {\n          return Promise.reject(streamBrandCheckException('pipeTo'));\n        }\n        if (IsWritableStream(dest) === false) {\n          return Promise.reject(new TypeError('ReadableStream.prototype.pipeTo\\'s first argument must be a WritableStream'));\n        }\n        preventClose = Boolean(preventClose);\n        preventAbort = Boolean(preventAbort);\n        preventCancel = Boolean(preventCancel);\n        if (IsReadableStreamLocked(this) === true) {\n          return Promise.reject(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream'));\n        }\n        if (IsWritableStreamLocked(dest) === true) {\n          return Promise.reject(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream'));\n        }\n        var reader = AcquireReadableStreamDefaultReader(this);\n        var writer = AcquireWritableStreamDefaultWriter(dest);\n        var shuttingDown = false;\n        var currentWrite = Promise.resolve();\n        return new Promise(function (resolve, reject) {\n          function pipeLoop() {\n            currentWrite = Promise.resolve();\n            if (shuttingDown === true) {\n              return Promise.resolve();\n            }\n            return writer._readyPromise.then(function () {\n              return ReadableStreamDefaultReaderRead(reader).then(function (_ref5) {\n                var value = _ref5.value,\n                    done = _ref5.done;\n                if (done === true) {\n                  return;\n                }\n                currentWrite = WritableStreamDefaultWriterWrite(writer, value).catch(function () {});\n              });\n            }).then(pipeLoop);\n          }\n          isOrBecomesErrored(_this, reader._closedPromise, function (storedError) {\n            if (preventAbort === false) {\n              shutdownWithAction(function () {\n                return WritableStreamAbort(dest, storedError);\n              }, true, storedError);\n            } else {\n              shutdown(true, storedError);\n            }\n          });\n          isOrBecomesErrored(dest, writer._closedPromise, function (storedError) {\n            if (preventCancel === false) {\n              shutdownWithAction(function () {\n                return ReadableStreamCancel(_this, storedError);\n              }, true, storedError);\n            } else {\n              shutdown(true, storedError);\n            }\n          });\n          isOrBecomesClosed(_this, reader._closedPromise, function () {\n            if (preventClose === false) {\n              shutdownWithAction(function () {\n                return WritableStreamDefaultWriterCloseWithErrorPropagation(writer);\n              });\n            } else {\n              shutdown();\n            }\n          });\n          if (WritableStreamCloseQueuedOrInFlight(dest) === true || dest._state === 'closed') {\n            var destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');\n            if (preventCancel === false) {\n              shutdownWithAction(function () {\n                return ReadableStreamCancel(_this, destClosed);\n              }, true, destClosed);\n            } else {\n              shutdown(true, destClosed);\n            }\n          }\n          pipeLoop().catch(function (err) {\n            currentWrite = Promise.resolve();\n            rethrowAssertionErrorRejection(err);\n          });\n          function waitForWritesToFinish() {\n            var oldCurrentWrite = currentWrite;\n            return currentWrite.then(function () {\n              return oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined;\n            });\n          }\n          function isOrBecomesErrored(stream, promise, action) {\n            if (stream._state === 'errored') {\n              action(stream._storedError);\n            } else {\n              promise.catch(action).catch(rethrowAssertionErrorRejection);\n            }\n          }\n          function isOrBecomesClosed(stream, promise, action) {\n            if (stream._state === 'closed') {\n              action();\n            } else {\n              promise.then(action).catch(rethrowAssertionErrorRejection);\n            }\n          }\n          function shutdownWithAction(action, originalIsError, originalError) {\n            if (shuttingDown === true) {\n              return;\n            }\n            shuttingDown = true;\n            if (dest._state === 'writable' && WritableStreamCloseQueuedOrInFlight(dest) === false) {\n              waitForWritesToFinish().then(doTheRest);\n            } else {\n              doTheRest();\n            }\n            function doTheRest() {\n              action().then(function () {\n                return finalize(originalIsError, originalError);\n              }, function (newError) {\n                return finalize(true, newError);\n              }).catch(rethrowAssertionErrorRejection);\n            }\n          }\n          function shutdown(isError, error) {\n            if (shuttingDown === true) {\n              return;\n            }\n            shuttingDown = true;\n            if (dest._state === 'writable' && WritableStreamCloseQueuedOrInFlight(dest) === false) {\n              waitForWritesToFinish().then(function () {\n                return finalize(isError, error);\n              }).catch(rethrowAssertionErrorRejection);\n            } else {\n              finalize(isError, error);\n            }\n          }\n          function finalize(isError, error) {\n            WritableStreamDefaultWriterRelease(writer);\n            ReadableStreamReaderGenericRelease(reader);\n            if (isError) {\n              reject(error);\n            } else {\n              resolve(undefined);\n            }\n          }\n        });\n      }\n    }, {\n      key: 'tee',\n      value: function tee() {\n        if (IsReadableStream(this) === false) {\n          throw streamBrandCheckException('tee');\n        }\n        var branches = ReadableStreamTee(this, false);\n        return createArrayFromList(branches);\n      }\n    }, {\n      key: 'locked',\n      get: function get() {\n        if (IsReadableStream(this) === false) {\n          throw streamBrandCheckException('locked');\n        }\n        return IsReadableStreamLocked(this);\n      }\n    }]);\n    return ReadableStream;\n  }();\n  module.exports = {\n    ReadableStream: ReadableStream,\n    IsReadableStreamDisturbed: IsReadableStreamDisturbed,\n    ReadableStreamDefaultControllerClose: ReadableStreamDefaultControllerClose,\n    ReadableStreamDefaultControllerEnqueue: ReadableStreamDefaultControllerEnqueue,\n    ReadableStreamDefaultControllerError: ReadableStreamDefaultControllerError,\n    ReadableStreamDefaultControllerGetDesiredSize: ReadableStreamDefaultControllerGetDesiredSize\n  };\n  function AcquireReadableStreamBYOBReader(stream) {\n    return new ReadableStreamBYOBReader(stream);\n  }\n  function AcquireReadableStreamDefaultReader(stream) {\n    return new ReadableStreamDefaultReader(stream);\n  }\n  function IsReadableStream(x) {\n    if (!typeIsObject(x)) {\n      return false;\n    }\n    if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n      return false;\n    }\n    return true;\n  }\n  function IsReadableStreamDisturbed(stream) {\n    assert(IsReadableStream(stream) === true, 'IsReadableStreamDisturbed should only be used on known readable streams');\n    return stream._disturbed;\n  }\n  function IsReadableStreamLocked(stream) {\n    assert(IsReadableStream(stream) === true, 'IsReadableStreamLocked should only be used on known readable streams');\n    if (stream._reader === undefined) {\n      return false;\n    }\n    return true;\n  }\n  function ReadableStreamTee(stream, cloneForBranch2) {\n    assert(IsReadableStream(stream) === true);\n    assert(typeof cloneForBranch2 === 'boolean');\n    var reader = AcquireReadableStreamDefaultReader(stream);\n    var teeState = {\n      closedOrErrored: false,\n      canceled1: false,\n      canceled2: false,\n      reason1: undefined,\n      reason2: undefined\n    };\n    teeState.promise = new Promise(function (resolve) {\n      teeState._resolve = resolve;\n    });\n    var pull = create_ReadableStreamTeePullFunction();\n    pull._reader = reader;\n    pull._teeState = teeState;\n    pull._cloneForBranch2 = cloneForBranch2;\n    var cancel1 = create_ReadableStreamTeeBranch1CancelFunction();\n    cancel1._stream = stream;\n    cancel1._teeState = teeState;\n    var cancel2 = create_ReadableStreamTeeBranch2CancelFunction();\n    cancel2._stream = stream;\n    cancel2._teeState = teeState;\n    var underlyingSource1 = Object.create(Object.prototype);\n    createDataProperty(underlyingSource1, 'pull', pull);\n    createDataProperty(underlyingSource1, 'cancel', cancel1);\n    var branch1Stream = new ReadableStream(underlyingSource1);\n    var underlyingSource2 = Object.create(Object.prototype);\n    createDataProperty(underlyingSource2, 'pull', pull);\n    createDataProperty(underlyingSource2, 'cancel', cancel2);\n    var branch2Stream = new ReadableStream(underlyingSource2);\n    pull._branch1 = branch1Stream._readableStreamController;\n    pull._branch2 = branch2Stream._readableStreamController;\n    reader._closedPromise.catch(function (r) {\n      if (teeState.closedOrErrored === true) {\n        return;\n      }\n      ReadableStreamDefaultControllerError(pull._branch1, r);\n      ReadableStreamDefaultControllerError(pull._branch2, r);\n      teeState.closedOrErrored = true;\n    });\n    return [branch1Stream, branch2Stream];\n  }\n  function create_ReadableStreamTeePullFunction() {\n    function f() {\n      var reader = f._reader,\n          branch1 = f._branch1,\n          branch2 = f._branch2,\n          teeState = f._teeState;\n      return ReadableStreamDefaultReaderRead(reader).then(function (result) {\n        assert(typeIsObject(result));\n        var value = result.value;\n        var done = result.done;\n        assert(typeof done === 'boolean');\n        if (done === true && teeState.closedOrErrored === false) {\n          if (teeState.canceled1 === false) {\n            ReadableStreamDefaultControllerClose(branch1);\n          }\n          if (teeState.canceled2 === false) {\n            ReadableStreamDefaultControllerClose(branch2);\n          }\n          teeState.closedOrErrored = true;\n        }\n        if (teeState.closedOrErrored === true) {\n          return;\n        }\n        var value1 = value;\n        var value2 = value;\n        if (teeState.canceled1 === false) {\n          ReadableStreamDefaultControllerEnqueue(branch1, value1);\n        }\n        if (teeState.canceled2 === false) {\n          ReadableStreamDefaultControllerEnqueue(branch2, value2);\n        }\n      });\n    }\n    return f;\n  }\n  function create_ReadableStreamTeeBranch1CancelFunction() {\n    function f(reason) {\n      var stream = f._stream,\n          teeState = f._teeState;\n      teeState.canceled1 = true;\n      teeState.reason1 = reason;\n      if (teeState.canceled2 === true) {\n        var compositeReason = createArrayFromList([teeState.reason1, teeState.reason2]);\n        var cancelResult = ReadableStreamCancel(stream, compositeReason);\n        teeState._resolve(cancelResult);\n      }\n      return teeState.promise;\n    }\n    return f;\n  }\n  function create_ReadableStreamTeeBranch2CancelFunction() {\n    function f(reason) {\n      var stream = f._stream,\n          teeState = f._teeState;\n      teeState.canceled2 = true;\n      teeState.reason2 = reason;\n      if (teeState.canceled1 === true) {\n        var compositeReason = createArrayFromList([teeState.reason1, teeState.reason2]);\n        var cancelResult = ReadableStreamCancel(stream, compositeReason);\n        teeState._resolve(cancelResult);\n      }\n      return teeState.promise;\n    }\n    return f;\n  }\n  function ReadableStreamAddReadIntoRequest(stream) {\n    assert(IsReadableStreamBYOBReader(stream._reader) === true);\n    assert(stream._state === 'readable' || stream._state === 'closed');\n    var promise = new Promise(function (resolve, reject) {\n      var readIntoRequest = {\n        _resolve: resolve,\n        _reject: reject\n      };\n      stream._reader._readIntoRequests.push(readIntoRequest);\n    });\n    return promise;\n  }\n  function ReadableStreamAddReadRequest(stream) {\n    assert(IsReadableStreamDefaultReader(stream._reader) === true);\n    assert(stream._state === 'readable');\n    var promise = new Promise(function (resolve, reject) {\n      var readRequest = {\n        _resolve: resolve,\n        _reject: reject\n      };\n      stream._reader._readRequests.push(readRequest);\n    });\n    return promise;\n  }\n  function ReadableStreamCancel(stream, reason) {\n    stream._disturbed = true;\n    if (stream._state === 'closed') {\n      return Promise.resolve(undefined);\n    }\n    if (stream._state === 'errored') {\n      return Promise.reject(stream._storedError);\n    }\n    ReadableStreamClose(stream);\n    var sourceCancelPromise = stream._readableStreamController.__cancelSteps(reason);\n    return sourceCancelPromise.then(function () {\n      return undefined;\n    });\n  }\n  function ReadableStreamClose(stream) {\n    assert(stream._state === 'readable');\n    stream._state = 'closed';\n    var reader = stream._reader;\n    if (reader === undefined) {\n      return undefined;\n    }\n    if (IsReadableStreamDefaultReader(reader) === true) {\n      for (var i = 0; i < reader._readRequests.length; i++) {\n        var _resolve = reader._readRequests[i]._resolve;\n        _resolve(CreateIterResultObject(undefined, true));\n      }\n      reader._readRequests = [];\n    }\n    defaultReaderClosedPromiseResolve(reader);\n    return undefined;\n  }\n  function ReadableStreamError(stream, e) {\n    assert(IsReadableStream(stream) === true, 'stream must be ReadableStream');\n    assert(stream._state === 'readable', 'state must be readable');\n    stream._state = 'errored';\n    stream._storedError = e;\n    var reader = stream._reader;\n    if (reader === undefined) {\n      return undefined;\n    }\n    if (IsReadableStreamDefaultReader(reader) === true) {\n      for (var i = 0; i < reader._readRequests.length; i++) {\n        var readRequest = reader._readRequests[i];\n        readRequest._reject(e);\n      }\n      reader._readRequests = [];\n    } else {\n      assert(IsReadableStreamBYOBReader(reader), 'reader must be ReadableStreamBYOBReader');\n      for (var _i = 0; _i < reader._readIntoRequests.length; _i++) {\n        var readIntoRequest = reader._readIntoRequests[_i];\n        readIntoRequest._reject(e);\n      }\n      reader._readIntoRequests = [];\n    }\n    defaultReaderClosedPromiseReject(reader, e);\n    reader._closedPromise.catch(function () {});\n  }\n  function ReadableStreamFulfillReadIntoRequest(stream, chunk, done) {\n    var reader = stream._reader;\n    assert(reader._readIntoRequests.length > 0);\n    var readIntoRequest = reader._readIntoRequests.shift();\n    readIntoRequest._resolve(CreateIterResultObject(chunk, done));\n  }\n  function ReadableStreamFulfillReadRequest(stream, chunk, done) {\n    var reader = stream._reader;\n    assert(reader._readRequests.length > 0);\n    var readRequest = reader._readRequests.shift();\n    readRequest._resolve(CreateIterResultObject(chunk, done));\n  }\n  function ReadableStreamGetNumReadIntoRequests(stream) {\n    return stream._reader._readIntoRequests.length;\n  }\n  function ReadableStreamGetNumReadRequests(stream) {\n    return stream._reader._readRequests.length;\n  }\n  function ReadableStreamHasBYOBReader(stream) {\n    var reader = stream._reader;\n    if (reader === undefined) {\n      return false;\n    }\n    if (IsReadableStreamBYOBReader(reader) === false) {\n      return false;\n    }\n    return true;\n  }\n  function ReadableStreamHasDefaultReader(stream) {\n    var reader = stream._reader;\n    if (reader === undefined) {\n      return false;\n    }\n    if (IsReadableStreamDefaultReader(reader) === false) {\n      return false;\n    }\n    return true;\n  }\n  var ReadableStreamDefaultReader = function () {\n    function ReadableStreamDefaultReader(stream) {\n      _classCallCheck(this, ReadableStreamDefaultReader);\n      if (IsReadableStream(stream) === false) {\n        throw new TypeError('ReadableStreamDefaultReader can only be constructed with a ReadableStream instance');\n      }\n      if (IsReadableStreamLocked(stream) === true) {\n        throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n      }\n      ReadableStreamReaderGenericInitialize(this, stream);\n      this._readRequests = [];\n    }\n    _createClass(ReadableStreamDefaultReader, [{\n      key: 'cancel',\n      value: function cancel(reason) {\n        if (IsReadableStreamDefaultReader(this) === false) {\n          return Promise.reject(defaultReaderBrandCheckException('cancel'));\n        }\n        if (this._ownerReadableStream === undefined) {\n          return Promise.reject(readerLockException('cancel'));\n        }\n        return ReadableStreamReaderGenericCancel(this, reason);\n      }\n    }, {\n      key: 'read',\n      value: function read() {\n        if (IsReadableStreamDefaultReader(this) === false) {\n          return Promise.reject(defaultReaderBrandCheckException('read'));\n        }\n        if (this._ownerReadableStream === undefined) {\n          return Promise.reject(readerLockException('read from'));\n        }\n        return ReadableStreamDefaultReaderRead(this);\n      }\n    }, {\n      key: 'releaseLock',\n      value: function releaseLock() {\n        if (IsReadableStreamDefaultReader(this) === false) {\n          throw defaultReaderBrandCheckException('releaseLock');\n        }\n        if (this._ownerReadableStream === undefined) {\n          return;\n        }\n        if (this._readRequests.length > 0) {\n          throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n        }\n        ReadableStreamReaderGenericRelease(this);\n      }\n    }, {\n      key: 'closed',\n      get: function get() {\n        if (IsReadableStreamDefaultReader(this) === false) {\n          return Promise.reject(defaultReaderBrandCheckException('closed'));\n        }\n        return this._closedPromise;\n      }\n    }]);\n    return ReadableStreamDefaultReader;\n  }();\n  var ReadableStreamBYOBReader = function () {\n    function ReadableStreamBYOBReader(stream) {\n      _classCallCheck(this, ReadableStreamBYOBReader);\n      if (!IsReadableStream(stream)) {\n        throw new TypeError('ReadableStreamBYOBReader can only be constructed with a ReadableStream instance given a ' + 'byte source');\n      }\n      if (IsReadableByteStreamController(stream._readableStreamController) === false) {\n        throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' + 'source');\n      }\n      if (IsReadableStreamLocked(stream)) {\n        throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n      }\n      ReadableStreamReaderGenericInitialize(this, stream);\n      this._readIntoRequests = [];\n    }\n    _createClass(ReadableStreamBYOBReader, [{\n      key: 'cancel',\n      value: function cancel(reason) {\n        if (!IsReadableStreamBYOBReader(this)) {\n          return Promise.reject(byobReaderBrandCheckException('cancel'));\n        }\n        if (this._ownerReadableStream === undefined) {\n          return Promise.reject(readerLockException('cancel'));\n        }\n        return ReadableStreamReaderGenericCancel(this, reason);\n      }\n    }, {\n      key: 'read',\n      value: function read(view) {\n        if (!IsReadableStreamBYOBReader(this)) {\n          return Promise.reject(byobReaderBrandCheckException('read'));\n        }\n        if (this._ownerReadableStream === undefined) {\n          return Promise.reject(readerLockException('read from'));\n        }\n        if (!ArrayBuffer.isView(view)) {\n          return Promise.reject(new TypeError('view must be an array buffer view'));\n        }\n        if (view.byteLength === 0) {\n          return Promise.reject(new TypeError('view must have non-zero byteLength'));\n        }\n        return ReadableStreamBYOBReaderRead(this, view);\n      }\n    }, {\n      key: 'releaseLock',\n      value: function releaseLock() {\n        if (!IsReadableStreamBYOBReader(this)) {\n          throw byobReaderBrandCheckException('releaseLock');\n        }\n        if (this._ownerReadableStream === undefined) {\n          return;\n        }\n        if (this._readIntoRequests.length > 0) {\n          throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n        }\n        ReadableStreamReaderGenericRelease(this);\n      }\n    }, {\n      key: 'closed',\n      get: function get() {\n        if (!IsReadableStreamBYOBReader(this)) {\n          return Promise.reject(byobReaderBrandCheckException('closed'));\n        }\n        return this._closedPromise;\n      }\n    }]);\n    return ReadableStreamBYOBReader;\n  }();\n  function IsReadableStreamBYOBReader(x) {\n    if (!typeIsObject(x)) {\n      return false;\n    }\n    if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n      return false;\n    }\n    return true;\n  }\n  function IsReadableStreamDefaultReader(x) {\n    if (!typeIsObject(x)) {\n      return false;\n    }\n    if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n      return false;\n    }\n    return true;\n  }\n  function ReadableStreamReaderGenericInitialize(reader, stream) {\n    reader._ownerReadableStream = stream;\n    stream._reader = reader;\n    if (stream._state === 'readable') {\n      defaultReaderClosedPromiseInitialize(reader);\n    } else if (stream._state === 'closed') {\n      defaultReaderClosedPromiseInitializeAsResolved(reader);\n    } else {\n      assert(stream._state === 'errored', 'state must be errored');\n      defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n      reader._closedPromise.catch(function () {});\n    }\n  }\n  function ReadableStreamReaderGenericCancel(reader, reason) {\n    var stream = reader._ownerReadableStream;\n    assert(stream !== undefined);\n    return ReadableStreamCancel(stream, reason);\n  }\n  function ReadableStreamReaderGenericRelease(reader) {\n    assert(reader._ownerReadableStream !== undefined);\n    assert(reader._ownerReadableStream._reader === reader);\n    if (reader._ownerReadableStream._state === 'readable') {\n      defaultReaderClosedPromiseReject(reader, new TypeError('Reader was released and can no longer be used to monitor the stream\\'s closedness'));\n    } else {\n      defaultReaderClosedPromiseResetToRejected(reader, new TypeError('Reader was released and can no longer be used to monitor the stream\\'s closedness'));\n    }\n    reader._closedPromise.catch(function () {});\n    reader._ownerReadableStream._reader = undefined;\n    reader._ownerReadableStream = undefined;\n  }\n  function ReadableStreamBYOBReaderRead(reader, view) {\n    var stream = reader._ownerReadableStream;\n    assert(stream !== undefined);\n    stream._disturbed = true;\n    if (stream._state === 'errored') {\n      return Promise.reject(stream._storedError);\n    }\n    return ReadableByteStreamControllerPullInto(stream._readableStreamController, view);\n  }\n  function ReadableStreamDefaultReaderRead(reader) {\n    var stream = reader._ownerReadableStream;\n    assert(stream !== undefined);\n    stream._disturbed = true;\n    if (stream._state === 'closed') {\n      return Promise.resolve(CreateIterResultObject(undefined, true));\n    }\n    if (stream._state === 'errored') {\n      return Promise.reject(stream._storedError);\n    }\n    assert(stream._state === 'readable');\n    return stream._readableStreamController.__pullSteps();\n  }\n  var ReadableStreamDefaultController = function () {\n    function ReadableStreamDefaultController(stream, underlyingSource, size, highWaterMark) {\n      _classCallCheck(this, ReadableStreamDefaultController);\n      if (IsReadableStream(stream) === false) {\n        throw new TypeError('ReadableStreamDefaultController can only be constructed with a ReadableStream instance');\n      }\n      if (stream._readableStreamController !== undefined) {\n        throw new TypeError('ReadableStreamDefaultController instances can only be created by the ReadableStream constructor');\n      }\n      this._controlledReadableStream = stream;\n      this._underlyingSource = underlyingSource;\n      this._queue = undefined;\n      this._queueTotalSize = undefined;\n      ResetQueue(this);\n      this._started = false;\n      this._closeRequested = false;\n      this._pullAgain = false;\n      this._pulling = false;\n      var normalizedStrategy = ValidateAndNormalizeQueuingStrategy(size, highWaterMark);\n      this._strategySize = normalizedStrategy.size;\n      this._strategyHWM = normalizedStrategy.highWaterMark;\n      var controller = this;\n      var startResult = InvokeOrNoop(underlyingSource, 'start', [this]);\n      Promise.resolve(startResult).then(function () {\n        controller._started = true;\n        assert(controller._pulling === false);\n        assert(controller._pullAgain === false);\n        ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n      }, function (r) {\n        ReadableStreamDefaultControllerErrorIfNeeded(controller, r);\n      }).catch(rethrowAssertionErrorRejection);\n    }\n    _createClass(ReadableStreamDefaultController, [{\n      key: 'close',\n      value: function close() {\n        if (IsReadableStreamDefaultController(this) === false) {\n          throw defaultControllerBrandCheckException('close');\n        }\n        if (this._closeRequested === true) {\n          throw new TypeError('The stream has already been closed; do not close it again!');\n        }\n        var state = this._controlledReadableStream._state;\n        if (state !== 'readable') {\n          throw new TypeError('The stream (in ' + state + ' state) is not in the readable state and cannot be closed');\n        }\n        ReadableStreamDefaultControllerClose(this);\n      }\n    }, {\n      key: 'enqueue',\n      value: function enqueue(chunk) {\n        if (IsReadableStreamDefaultController(this) === false) {\n          throw defaultControllerBrandCheckException('enqueue');\n        }\n        if (this._closeRequested === true) {\n          throw new TypeError('stream is closed or draining');\n        }\n        var state = this._controlledReadableStream._state;\n        if (state !== 'readable') {\n          throw new TypeError('The stream (in ' + state + ' state) is not in the readable state and cannot be enqueued to');\n        }\n        return ReadableStreamDefaultControllerEnqueue(this, chunk);\n      }\n    }, {\n      key: 'error',\n      value: function error(e) {\n        if (IsReadableStreamDefaultController(this) === false) {\n          throw defaultControllerBrandCheckException('error');\n        }\n        var stream = this._controlledReadableStream;\n        if (stream._state !== 'readable') {\n          throw new TypeError('The stream is ' + stream._state + ' and so cannot be errored');\n        }\n        ReadableStreamDefaultControllerError(this, e);\n      }\n    }, {\n      key: '__cancelSteps',\n      value: function __cancelSteps(reason) {\n        ResetQueue(this);\n        return PromiseInvokeOrNoop(this._underlyingSource, 'cancel', [reason]);\n      }\n    }, {\n      key: '__pullSteps',\n      value: function __pullSteps() {\n        var stream = this._controlledReadableStream;\n        if (this._queue.length > 0) {\n          var chunk = DequeueValue(this);\n          if (this._closeRequested === true && this._queue.length === 0) {\n            ReadableStreamClose(stream);\n          } else {\n            ReadableStreamDefaultControllerCallPullIfNeeded(this);\n          }\n          return Promise.resolve(CreateIterResultObject(chunk, false));\n        }\n        var pendingPromise = ReadableStreamAddReadRequest(stream);\n        ReadableStreamDefaultControllerCallPullIfNeeded(this);\n        return pendingPromise;\n      }\n    }, {\n      key: 'desiredSize',\n      get: function get() {\n        if (IsReadableStreamDefaultController(this) === false) {\n          throw defaultControllerBrandCheckException('desiredSize');\n        }\n        return ReadableStreamDefaultControllerGetDesiredSize(this);\n      }\n    }]);\n    return ReadableStreamDefaultController;\n  }();\n  function IsReadableStreamDefaultController(x) {\n    if (!typeIsObject(x)) {\n      return false;\n    }\n    if (!Object.prototype.hasOwnProperty.call(x, '_underlyingSource')) {\n      return false;\n    }\n    return true;\n  }\n  function ReadableStreamDefaultControllerCallPullIfNeeded(controller) {\n    var shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n    if (shouldPull === false) {\n      return undefined;\n    }\n    if (controller._pulling === true) {\n      controller._pullAgain = true;\n      return undefined;\n    }\n    assert(controller._pullAgain === false);\n    controller._pulling = true;\n    var pullPromise = PromiseInvokeOrNoop(controller._underlyingSource, 'pull', [controller]);\n    pullPromise.then(function () {\n      controller._pulling = false;\n      if (controller._pullAgain === true) {\n        controller._pullAgain = false;\n        return ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n      }\n      return undefined;\n    }, function (e) {\n      ReadableStreamDefaultControllerErrorIfNeeded(controller, e);\n    }).catch(rethrowAssertionErrorRejection);\n    return undefined;\n  }\n  function ReadableStreamDefaultControllerShouldCallPull(controller) {\n    var stream = controller._controlledReadableStream;\n    if (stream._state === 'closed' || stream._state === 'errored') {\n      return false;\n    }\n    if (controller._closeRequested === true) {\n      return false;\n    }\n    if (controller._started === false) {\n      return false;\n    }\n    if (IsReadableStreamLocked(stream) === true && ReadableStreamGetNumReadRequests(stream) > 0) {\n      return true;\n    }\n    var desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n    if (desiredSize > 0) {\n      return true;\n    }\n    return false;\n  }\n  function ReadableStreamDefaultControllerClose(controller) {\n    var stream = controller._controlledReadableStream;\n    assert(controller._closeRequested === false);\n    assert(stream._state === 'readable');\n    controller._closeRequested = true;\n    if (controller._queue.length === 0) {\n      ReadableStreamClose(stream);\n    }\n  }\n  function ReadableStreamDefaultControllerEnqueue(controller, chunk) {\n    var stream = controller._controlledReadableStream;\n    assert(controller._closeRequested === false);\n    assert(stream._state === 'readable');\n    if (IsReadableStreamLocked(stream) === true && ReadableStreamGetNumReadRequests(stream) > 0) {\n      ReadableStreamFulfillReadRequest(stream, chunk, false);\n    } else {\n      var chunkSize = 1;\n      if (controller._strategySize !== undefined) {\n        var strategySize = controller._strategySize;\n        try {\n          chunkSize = strategySize(chunk);\n        } catch (chunkSizeE) {\n          ReadableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n          throw chunkSizeE;\n        }\n      }\n      try {\n        EnqueueValueWithSize(controller, chunk, chunkSize);\n      } catch (enqueueE) {\n        ReadableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n        throw enqueueE;\n      }\n    }\n    ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n    return undefined;\n  }\n  function ReadableStreamDefaultControllerError(controller, e) {\n    var stream = controller._controlledReadableStream;\n    assert(stream._state === 'readable');\n    ResetQueue(controller);\n    ReadableStreamError(stream, e);\n  }\n  function ReadableStreamDefaultControllerErrorIfNeeded(controller, e) {\n    if (controller._controlledReadableStream._state === 'readable') {\n      ReadableStreamDefaultControllerError(controller, e);\n    }\n  }\n  function ReadableStreamDefaultControllerGetDesiredSize(controller) {\n    var stream = controller._controlledReadableStream;\n    var state = stream._state;\n    if (state === 'errored') {\n      return null;\n    }\n    if (state === 'closed') {\n      return 0;\n    }\n    return controller._strategyHWM - controller._queueTotalSize;\n  }\n  var ReadableStreamBYOBRequest = function () {\n    function ReadableStreamBYOBRequest(controller, view) {\n      _classCallCheck(this, ReadableStreamBYOBRequest);\n      this._associatedReadableByteStreamController = controller;\n      this._view = view;\n    }\n    _createClass(ReadableStreamBYOBRequest, [{\n      key: 'respond',\n      value: function respond(bytesWritten) {\n        if (IsReadableStreamBYOBRequest(this) === false) {\n          throw byobRequestBrandCheckException('respond');\n        }\n        if (this._associatedReadableByteStreamController === undefined) {\n          throw new TypeError('This BYOB request has been invalidated');\n        }\n        ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n      }\n    }, {\n      key: 'respondWithNewView',\n      value: function respondWithNewView(view) {\n        if (IsReadableStreamBYOBRequest(this) === false) {\n          throw byobRequestBrandCheckException('respond');\n        }\n        if (this._associatedReadableByteStreamController === undefined) {\n          throw new TypeError('This BYOB request has been invalidated');\n        }\n        if (!ArrayBuffer.isView(view)) {\n          throw new TypeError('You can only respond with array buffer views');\n        }\n        ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n      }\n    }, {\n      key: 'view',\n      get: function get() {\n        return this._view;\n      }\n    }]);\n    return ReadableStreamBYOBRequest;\n  }();\n  var ReadableByteStreamController = function () {\n    function ReadableByteStreamController(stream, underlyingByteSource, highWaterMark) {\n      _classCallCheck(this, ReadableByteStreamController);\n      if (IsReadableStream(stream) === false) {\n        throw new TypeError('ReadableByteStreamController can only be constructed with a ReadableStream instance given ' + 'a byte source');\n      }\n      if (stream._readableStreamController !== undefined) {\n        throw new TypeError('ReadableByteStreamController instances can only be created by the ReadableStream constructor given a byte ' + 'source');\n      }\n      this._controlledReadableStream = stream;\n      this._underlyingByteSource = underlyingByteSource;\n      this._pullAgain = false;\n      this._pulling = false;\n      ReadableByteStreamControllerClearPendingPullIntos(this);\n      this._queue = this._queueTotalSize = undefined;\n      ResetQueue(this);\n      this._closeRequested = false;\n      this._started = false;\n      this._strategyHWM = ValidateAndNormalizeHighWaterMark(highWaterMark);\n      var autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n      if (autoAllocateChunkSize !== undefined) {\n        if (Number.isInteger(autoAllocateChunkSize) === false || autoAllocateChunkSize <= 0) {\n          throw new RangeError('autoAllocateChunkSize must be a positive integer');\n        }\n      }\n      this._autoAllocateChunkSize = autoAllocateChunkSize;\n      this._pendingPullIntos = [];\n      var controller = this;\n      var startResult = InvokeOrNoop(underlyingByteSource, 'start', [this]);\n      Promise.resolve(startResult).then(function () {\n        controller._started = true;\n        assert(controller._pulling === false);\n        assert(controller._pullAgain === false);\n        ReadableByteStreamControllerCallPullIfNeeded(controller);\n      }, function (r) {\n        if (stream._state === 'readable') {\n          ReadableByteStreamControllerError(controller, r);\n        }\n      }).catch(rethrowAssertionErrorRejection);\n    }\n    _createClass(ReadableByteStreamController, [{\n      key: 'close',\n      value: function close() {\n        if (IsReadableByteStreamController(this) === false) {\n          throw byteStreamControllerBrandCheckException('close');\n        }\n        if (this._closeRequested === true) {\n          throw new TypeError('The stream has already been closed; do not close it again!');\n        }\n        var state = this._controlledReadableStream._state;\n        if (state !== 'readable') {\n          throw new TypeError('The stream (in ' + state + ' state) is not in the readable state and cannot be closed');\n        }\n        ReadableByteStreamControllerClose(this);\n      }\n    }, {\n      key: 'enqueue',\n      value: function enqueue(chunk) {\n        if (IsReadableByteStreamController(this) === false) {\n          throw byteStreamControllerBrandCheckException('enqueue');\n        }\n        if (this._closeRequested === true) {\n          throw new TypeError('stream is closed or draining');\n        }\n        var state = this._controlledReadableStream._state;\n        if (state !== 'readable') {\n          throw new TypeError('The stream (in ' + state + ' state) is not in the readable state and cannot be enqueued to');\n        }\n        if (!ArrayBuffer.isView(chunk)) {\n          throw new TypeError('You can only enqueue array buffer views when using a ReadableByteStreamController');\n        }\n        ReadableByteStreamControllerEnqueue(this, chunk);\n      }\n    }, {\n      key: 'error',\n      value: function error(e) {\n        if (IsReadableByteStreamController(this) === false) {\n          throw byteStreamControllerBrandCheckException('error');\n        }\n        var stream = this._controlledReadableStream;\n        if (stream._state !== 'readable') {\n          throw new TypeError('The stream is ' + stream._state + ' and so cannot be errored');\n        }\n        ReadableByteStreamControllerError(this, e);\n      }\n    }, {\n      key: '__cancelSteps',\n      value: function __cancelSteps(reason) {\n        if (this._pendingPullIntos.length > 0) {\n          var firstDescriptor = this._pendingPullIntos[0];\n          firstDescriptor.bytesFilled = 0;\n        }\n        ResetQueue(this);\n        return PromiseInvokeOrNoop(this._underlyingByteSource, 'cancel', [reason]);\n      }\n    }, {\n      key: '__pullSteps',\n      value: function __pullSteps() {\n        var stream = this._controlledReadableStream;\n        assert(ReadableStreamHasDefaultReader(stream) === true);\n        if (this._queueTotalSize > 0) {\n          assert(ReadableStreamGetNumReadRequests(stream) === 0);\n          var entry = this._queue.shift();\n          this._queueTotalSize -= entry.byteLength;\n          ReadableByteStreamControllerHandleQueueDrain(this);\n          var view = void 0;\n          try {\n            view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n          } catch (viewE) {\n            return Promise.reject(viewE);\n          }\n          return Promise.resolve(CreateIterResultObject(view, false));\n        }\n        var autoAllocateChunkSize = this._autoAllocateChunkSize;\n        if (autoAllocateChunkSize !== undefined) {\n          var buffer = void 0;\n          try {\n            buffer = new ArrayBuffer(autoAllocateChunkSize);\n          } catch (bufferE) {\n            return Promise.reject(bufferE);\n          }\n          var pullIntoDescriptor = {\n            buffer: buffer,\n            byteOffset: 0,\n            byteLength: autoAllocateChunkSize,\n            bytesFilled: 0,\n            elementSize: 1,\n            ctor: Uint8Array,\n            readerType: 'default'\n          };\n          this._pendingPullIntos.push(pullIntoDescriptor);\n        }\n        var promise = ReadableStreamAddReadRequest(stream);\n        ReadableByteStreamControllerCallPullIfNeeded(this);\n        return promise;\n      }\n    }, {\n      key: 'byobRequest',\n      get: function get() {\n        if (IsReadableByteStreamController(this) === false) {\n          throw byteStreamControllerBrandCheckException('byobRequest');\n        }\n        if (this._byobRequest === undefined && this._pendingPullIntos.length > 0) {\n          var firstDescriptor = this._pendingPullIntos[0];\n          var view = new Uint8Array(firstDescriptor.buffer, firstDescriptor.byteOffset + firstDescriptor.bytesFilled, firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n          this._byobRequest = new ReadableStreamBYOBRequest(this, view);\n        }\n        return this._byobRequest;\n      }\n    }, {\n      key: 'desiredSize',\n      get: function get() {\n        if (IsReadableByteStreamController(this) === false) {\n          throw byteStreamControllerBrandCheckException('desiredSize');\n        }\n        return ReadableByteStreamControllerGetDesiredSize(this);\n      }\n    }]);\n    return ReadableByteStreamController;\n  }();\n  function IsReadableByteStreamController(x) {\n    if (!typeIsObject(x)) {\n      return false;\n    }\n    if (!Object.prototype.hasOwnProperty.call(x, '_underlyingByteSource')) {\n      return false;\n    }\n    return true;\n  }\n  function IsReadableStreamBYOBRequest(x) {\n    if (!typeIsObject(x)) {\n      return false;\n    }\n    if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n      return false;\n    }\n    return true;\n  }\n  function ReadableByteStreamControllerCallPullIfNeeded(controller) {\n    var shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n    if (shouldPull === false) {\n      return undefined;\n    }\n    if (controller._pulling === true) {\n      controller._pullAgain = true;\n      return undefined;\n    }\n    assert(controller._pullAgain === false);\n    controller._pulling = true;\n    var pullPromise = PromiseInvokeOrNoop(controller._underlyingByteSource, 'pull', [controller]);\n    pullPromise.then(function () {\n      controller._pulling = false;\n      if (controller._pullAgain === true) {\n        controller._pullAgain = false;\n        ReadableByteStreamControllerCallPullIfNeeded(controller);\n      }\n    }, function (e) {\n      if (controller._controlledReadableStream._state === 'readable') {\n        ReadableByteStreamControllerError(controller, e);\n      }\n    }).catch(rethrowAssertionErrorRejection);\n    return undefined;\n  }\n  function ReadableByteStreamControllerClearPendingPullIntos(controller) {\n    ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n    controller._pendingPullIntos = [];\n  }\n  function ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor) {\n    assert(stream._state !== 'errored', 'state must not be errored');\n    var done = false;\n    if (stream._state === 'closed') {\n      assert(pullIntoDescriptor.bytesFilled === 0);\n      done = true;\n    }\n    var filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n    if (pullIntoDescriptor.readerType === 'default') {\n      ReadableStreamFulfillReadRequest(stream, filledView, done);\n    } else {\n      assert(pullIntoDescriptor.readerType === 'byob');\n      ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n    }\n  }\n  function ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor) {\n    var bytesFilled = pullIntoDescriptor.bytesFilled;\n    var elementSize = pullIntoDescriptor.elementSize;\n    assert(bytesFilled <= pullIntoDescriptor.byteLength);\n    assert(bytesFilled % elementSize === 0);\n    return new pullIntoDescriptor.ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize);\n  }\n  function ReadableByteStreamControllerEnqueueChunkToQueue(controller, buffer, byteOffset, byteLength) {\n    controller._queue.push({\n      buffer: buffer,\n      byteOffset: byteOffset,\n      byteLength: byteLength\n    });\n    controller._queueTotalSize += byteLength;\n  }\n  function ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) {\n    var elementSize = pullIntoDescriptor.elementSize;\n    var currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\n    var maxBytesToCopy = Math.min(controller._queueTotalSize, pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n    var maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n    var maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\n    var totalBytesToCopyRemaining = maxBytesToCopy;\n    var ready = false;\n    if (maxAlignedBytes > currentAlignedBytes) {\n      totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n      ready = true;\n    }\n    var queue = controller._queue;\n    while (totalBytesToCopyRemaining > 0) {\n      var headOfQueue = queue[0];\n      var bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n      var destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n      ArrayBufferCopy(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n      if (headOfQueue.byteLength === bytesToCopy) {\n        queue.shift();\n      } else {\n        headOfQueue.byteOffset += bytesToCopy;\n        headOfQueue.byteLength -= bytesToCopy;\n      }\n      controller._queueTotalSize -= bytesToCopy;\n      ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n      totalBytesToCopyRemaining -= bytesToCopy;\n    }\n    if (ready === false) {\n      assert(controller._queueTotalSize === 0, 'queue must be empty');\n      assert(pullIntoDescriptor.bytesFilled > 0);\n      assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize);\n    }\n    return ready;\n  }\n  function ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, size, pullIntoDescriptor) {\n    assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos[0] === pullIntoDescriptor);\n    ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n    pullIntoDescriptor.bytesFilled += size;\n  }\n  function ReadableByteStreamControllerHandleQueueDrain(controller) {\n    assert(controller._controlledReadableStream._state === 'readable');\n    if (controller._queueTotalSize === 0 && controller._closeRequested === true) {\n      ReadableStreamClose(controller._controlledReadableStream);\n    } else {\n      ReadableByteStreamControllerCallPullIfNeeded(controller);\n    }\n  }\n  function ReadableByteStreamControllerInvalidateBYOBRequest(controller) {\n    if (controller._byobRequest === undefined) {\n      return;\n    }\n    controller._byobRequest._associatedReadableByteStreamController = undefined;\n    controller._byobRequest._view = undefined;\n    controller._byobRequest = undefined;\n  }\n  function ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller) {\n    assert(controller._closeRequested === false);\n    while (controller._pendingPullIntos.length > 0) {\n      if (controller._queueTotalSize === 0) {\n        return;\n      }\n      var pullIntoDescriptor = controller._pendingPullIntos[0];\n      if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) === true) {\n        ReadableByteStreamControllerShiftPendingPullInto(controller);\n        ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableStream, pullIntoDescriptor);\n      }\n    }\n  }\n  function ReadableByteStreamControllerPullInto(controller, view) {\n    var stream = controller._controlledReadableStream;\n    var elementSize = 1;\n    if (view.constructor !== DataView) {\n      elementSize = view.constructor.BYTES_PER_ELEMENT;\n    }\n    var ctor = view.constructor;\n    var pullIntoDescriptor = {\n      buffer: view.buffer,\n      byteOffset: view.byteOffset,\n      byteLength: view.byteLength,\n      bytesFilled: 0,\n      elementSize: elementSize,\n      ctor: ctor,\n      readerType: 'byob'\n    };\n    if (controller._pendingPullIntos.length > 0) {\n      pullIntoDescriptor.buffer = TransferArrayBuffer(pullIntoDescriptor.buffer);\n      controller._pendingPullIntos.push(pullIntoDescriptor);\n      return ReadableStreamAddReadIntoRequest(stream);\n    }\n    if (stream._state === 'closed') {\n      var emptyView = new view.constructor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n      return Promise.resolve(CreateIterResultObject(emptyView, true));\n    }\n    if (controller._queueTotalSize > 0) {\n      if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) === true) {\n        var filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n        ReadableByteStreamControllerHandleQueueDrain(controller);\n        return Promise.resolve(CreateIterResultObject(filledView, false));\n      }\n      if (controller._closeRequested === true) {\n        var e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n        ReadableByteStreamControllerError(controller, e);\n        return Promise.reject(e);\n      }\n    }\n    pullIntoDescriptor.buffer = TransferArrayBuffer(pullIntoDescriptor.buffer);\n    controller._pendingPullIntos.push(pullIntoDescriptor);\n    var promise = ReadableStreamAddReadIntoRequest(stream);\n    ReadableByteStreamControllerCallPullIfNeeded(controller);\n    return promise;\n  }\n  function ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor) {\n    firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n    assert(firstDescriptor.bytesFilled === 0, 'bytesFilled must be 0');\n    var stream = controller._controlledReadableStream;\n    if (ReadableStreamHasBYOBReader(stream) === true) {\n      while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n        var pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n        ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n      }\n    }\n  }\n  function ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, pullIntoDescriptor) {\n    if (pullIntoDescriptor.bytesFilled + bytesWritten > pullIntoDescriptor.byteLength) {\n      throw new RangeError('bytesWritten out of range');\n    }\n    ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n    if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\n      return;\n    }\n    ReadableByteStreamControllerShiftPendingPullInto(controller);\n    var remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n    if (remainderSize > 0) {\n      var end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n      var remainder = pullIntoDescriptor.buffer.slice(end - remainderSize, end);\n      ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\n    }\n    pullIntoDescriptor.buffer = TransferArrayBuffer(pullIntoDescriptor.buffer);\n    pullIntoDescriptor.bytesFilled -= remainderSize;\n    ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableStream, pullIntoDescriptor);\n    ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n  }\n  function ReadableByteStreamControllerRespondInternal(controller, bytesWritten) {\n    var firstDescriptor = controller._pendingPullIntos[0];\n    var stream = controller._controlledReadableStream;\n    if (stream._state === 'closed') {\n      if (bytesWritten !== 0) {\n        throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n      }\n      ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n    } else {\n      assert(stream._state === 'readable');\n      ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n    }\n  }\n  function ReadableByteStreamControllerShiftPendingPullInto(controller) {\n    var descriptor = controller._pendingPullIntos.shift();\n    ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n    return descriptor;\n  }\n  function ReadableByteStreamControllerShouldCallPull(controller) {\n    var stream = controller._controlledReadableStream;\n    if (stream._state !== 'readable') {\n      return false;\n    }\n    if (controller._closeRequested === true) {\n      return false;\n    }\n    if (controller._started === false) {\n      return false;\n    }\n    if (ReadableStreamHasDefaultReader(stream) === true && ReadableStreamGetNumReadRequests(stream) > 0) {\n      return true;\n    }\n    if (ReadableStreamHasBYOBReader(stream) === true && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n      return true;\n    }\n    if (ReadableByteStreamControllerGetDesiredSize(controller) > 0) {\n      return true;\n    }\n    return false;\n  }\n  function ReadableByteStreamControllerClose(controller) {\n    var stream = controller._controlledReadableStream;\n    assert(controller._closeRequested === false);\n    assert(stream._state === 'readable');\n    if (controller._queueTotalSize > 0) {\n      controller._closeRequested = true;\n      return;\n    }\n    if (controller._pendingPullIntos.length > 0) {\n      var firstPendingPullInto = controller._pendingPullIntos[0];\n      if (firstPendingPullInto.bytesFilled > 0) {\n        var e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n        ReadableByteStreamControllerError(controller, e);\n        throw e;\n      }\n    }\n    ReadableStreamClose(stream);\n  }\n  function ReadableByteStreamControllerEnqueue(controller, chunk) {\n    var stream = controller._controlledReadableStream;\n    assert(controller._closeRequested === false);\n    assert(stream._state === 'readable');\n    var buffer = chunk.buffer;\n    var byteOffset = chunk.byteOffset;\n    var byteLength = chunk.byteLength;\n    var transferredBuffer = TransferArrayBuffer(buffer);\n    if (ReadableStreamHasDefaultReader(stream) === true) {\n      if (ReadableStreamGetNumReadRequests(stream) === 0) {\n        ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n      } else {\n        assert(controller._queue.length === 0);\n        var transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n        ReadableStreamFulfillReadRequest(stream, transferredView, false);\n      }\n    } else if (ReadableStreamHasBYOBReader(stream) === true) {\n      ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n      ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n    } else {\n      assert(IsReadableStreamLocked(stream) === false, 'stream must not be locked');\n      ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n    }\n  }\n  function ReadableByteStreamControllerError(controller, e) {\n    var stream = controller._controlledReadableStream;\n    assert(stream._state === 'readable');\n    ReadableByteStreamControllerClearPendingPullIntos(controller);\n    ResetQueue(controller);\n    ReadableStreamError(stream, e);\n  }\n  function ReadableByteStreamControllerGetDesiredSize(controller) {\n    var stream = controller._controlledReadableStream;\n    var state = stream._state;\n    if (state === 'errored') {\n      return null;\n    }\n    if (state === 'closed') {\n      return 0;\n    }\n    return controller._strategyHWM - controller._queueTotalSize;\n  }\n  function ReadableByteStreamControllerRespond(controller, bytesWritten) {\n    bytesWritten = Number(bytesWritten);\n    if (IsFiniteNonNegativeNumber(bytesWritten) === false) {\n      throw new RangeError('bytesWritten must be a finite');\n    }\n    assert(controller._pendingPullIntos.length > 0);\n    ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n  }\n  function ReadableByteStreamControllerRespondWithNewView(controller, view) {\n    assert(controller._pendingPullIntos.length > 0);\n    var firstDescriptor = controller._pendingPullIntos[0];\n    if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n      throw new RangeError('The region specified by view does not match byobRequest');\n    }\n    if (firstDescriptor.byteLength !== view.byteLength) {\n      throw new RangeError('The buffer of view has different capacity than byobRequest');\n    }\n    firstDescriptor.buffer = view.buffer;\n    ReadableByteStreamControllerRespondInternal(controller, view.byteLength);\n  }\n  function streamBrandCheckException(name) {\n    return new TypeError('ReadableStream.prototype.' + name + ' can only be used on a ReadableStream');\n  }\n  function readerLockException(name) {\n    return new TypeError('Cannot ' + name + ' a stream using a released reader');\n  }\n  function defaultReaderBrandCheckException(name) {\n    return new TypeError('ReadableStreamDefaultReader.prototype.' + name + ' can only be used on a ReadableStreamDefaultReader');\n  }\n  function defaultReaderClosedPromiseInitialize(reader) {\n    reader._closedPromise = new Promise(function (resolve, reject) {\n      reader._closedPromise_resolve = resolve;\n      reader._closedPromise_reject = reject;\n    });\n  }\n  function defaultReaderClosedPromiseInitializeAsRejected(reader, reason) {\n    reader._closedPromise = Promise.reject(reason);\n    reader._closedPromise_resolve = undefined;\n    reader._closedPromise_reject = undefined;\n  }\n  function defaultReaderClosedPromiseInitializeAsResolved(reader) {\n    reader._closedPromise = Promise.resolve(undefined);\n    reader._closedPromise_resolve = undefined;\n    reader._closedPromise_reject = undefined;\n  }\n  function defaultReaderClosedPromiseReject(reader, reason) {\n    assert(reader._closedPromise_resolve !== undefined);\n    assert(reader._closedPromise_reject !== undefined);\n    reader._closedPromise_reject(reason);\n    reader._closedPromise_resolve = undefined;\n    reader._closedPromise_reject = undefined;\n  }\n  function defaultReaderClosedPromiseResetToRejected(reader, reason) {\n    assert(reader._closedPromise_resolve === undefined);\n    assert(reader._closedPromise_reject === undefined);\n    reader._closedPromise = Promise.reject(reason);\n  }\n  function defaultReaderClosedPromiseResolve(reader) {\n    assert(reader._closedPromise_resolve !== undefined);\n    assert(reader._closedPromise_reject !== undefined);\n    reader._closedPromise_resolve(undefined);\n    reader._closedPromise_resolve = undefined;\n    reader._closedPromise_reject = undefined;\n  }\n  function byobReaderBrandCheckException(name) {\n    return new TypeError('ReadableStreamBYOBReader.prototype.' + name + ' can only be used on a ReadableStreamBYOBReader');\n  }\n  function defaultControllerBrandCheckException(name) {\n    return new TypeError('ReadableStreamDefaultController.prototype.' + name + ' can only be used on a ReadableStreamDefaultController');\n  }\n  function byobRequestBrandCheckException(name) {\n    return new TypeError('ReadableStreamBYOBRequest.prototype.' + name + ' can only be used on a ReadableStreamBYOBRequest');\n  }\n  function byteStreamControllerBrandCheckException(name) {\n    return new TypeError('ReadableByteStreamController.prototype.' + name + ' can only be used on a ReadableByteStreamController');\n  }\n  function ifIsObjectAndHasAPromiseIsHandledInternalSlotSetPromiseIsHandledToTrue(promise) {\n    try {\n      Promise.prototype.then.call(promise, undefined, function () {});\n    } catch (e) {}\n  }\n}, function (module, exports, __w_pdfjs_require__) {\n  \"use strict\";\n\n  var transformStream = __w_pdfjs_require__(6);\n  var readableStream = __w_pdfjs_require__(4);\n  var writableStream = __w_pdfjs_require__(2);\n  exports.TransformStream = transformStream.TransformStream;\n  exports.ReadableStream = readableStream.ReadableStream;\n  exports.IsReadableStreamDisturbed = readableStream.IsReadableStreamDisturbed;\n  exports.ReadableStreamDefaultControllerClose = readableStream.ReadableStreamDefaultControllerClose;\n  exports.ReadableStreamDefaultControllerEnqueue = readableStream.ReadableStreamDefaultControllerEnqueue;\n  exports.ReadableStreamDefaultControllerError = readableStream.ReadableStreamDefaultControllerError;\n  exports.ReadableStreamDefaultControllerGetDesiredSize = readableStream.ReadableStreamDefaultControllerGetDesiredSize;\n  exports.AcquireWritableStreamDefaultWriter = writableStream.AcquireWritableStreamDefaultWriter;\n  exports.IsWritableStream = writableStream.IsWritableStream;\n  exports.IsWritableStreamLocked = writableStream.IsWritableStreamLocked;\n  exports.WritableStream = writableStream.WritableStream;\n  exports.WritableStreamAbort = writableStream.WritableStreamAbort;\n  exports.WritableStreamDefaultControllerError = writableStream.WritableStreamDefaultControllerError;\n  exports.WritableStreamDefaultWriterCloseWithErrorPropagation = writableStream.WritableStreamDefaultWriterCloseWithErrorPropagation;\n  exports.WritableStreamDefaultWriterRelease = writableStream.WritableStreamDefaultWriterRelease;\n  exports.WritableStreamDefaultWriterWrite = writableStream.WritableStreamDefaultWriterWrite;\n}, function (module, exports, __w_pdfjs_require__) {\n  \"use strict\";\n\n  var _createClass = function () {\n    function defineProperties(target, props) {\n      for (var i = 0; i < props.length; i++) {\n        var descriptor = props[i];\n        descriptor.enumerable = descriptor.enumerable || false;\n        descriptor.configurable = true;\n        if (\"value\" in descriptor) descriptor.writable = true;\n        Object.defineProperty(target, descriptor.key, descriptor);\n      }\n    }\n    return function (Constructor, protoProps, staticProps) {\n      if (protoProps) defineProperties(Constructor.prototype, protoProps);\n      if (staticProps) defineProperties(Constructor, staticProps);\n      return Constructor;\n    };\n  }();\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n  var _require = __w_pdfjs_require__(1),\n      assert = _require.assert;\n  var _require2 = __w_pdfjs_require__(0),\n      InvokeOrNoop = _require2.InvokeOrNoop,\n      PromiseInvokeOrPerformFallback = _require2.PromiseInvokeOrPerformFallback,\n      PromiseInvokeOrNoop = _require2.PromiseInvokeOrNoop,\n      typeIsObject = _require2.typeIsObject;\n  var _require3 = __w_pdfjs_require__(4),\n      ReadableStream = _require3.ReadableStream,\n      ReadableStreamDefaultControllerClose = _require3.ReadableStreamDefaultControllerClose,\n      ReadableStreamDefaultControllerEnqueue = _require3.ReadableStreamDefaultControllerEnqueue,\n      ReadableStreamDefaultControllerError = _require3.ReadableStreamDefaultControllerError,\n      ReadableStreamDefaultControllerGetDesiredSize = _require3.ReadableStreamDefaultControllerGetDesiredSize;\n  var _require4 = __w_pdfjs_require__(2),\n      WritableStream = _require4.WritableStream,\n      WritableStreamDefaultControllerError = _require4.WritableStreamDefaultControllerError;\n  function TransformStreamCloseReadable(transformStream) {\n    if (transformStream._errored === true) {\n      throw new TypeError('TransformStream is already errored');\n    }\n    if (transformStream._readableClosed === true) {\n      throw new TypeError('Readable side is already closed');\n    }\n    TransformStreamCloseReadableInternal(transformStream);\n  }\n  function TransformStreamEnqueueToReadable(transformStream, chunk) {\n    if (transformStream._errored === true) {\n      throw new TypeError('TransformStream is already errored');\n    }\n    if (transformStream._readableClosed === true) {\n      throw new TypeError('Readable side is already closed');\n    }\n    var controller = transformStream._readableController;\n    try {\n      ReadableStreamDefaultControllerEnqueue(controller, chunk);\n    } catch (e) {\n      transformStream._readableClosed = true;\n      TransformStreamErrorIfNeeded(transformStream, e);\n      throw transformStream._storedError;\n    }\n    var desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n    var maybeBackpressure = desiredSize <= 0;\n    if (maybeBackpressure === true && transformStream._backpressure === false) {\n      TransformStreamSetBackpressure(transformStream, true);\n    }\n  }\n  function TransformStreamError(transformStream, e) {\n    if (transformStream._errored === true) {\n      throw new TypeError('TransformStream is already errored');\n    }\n    TransformStreamErrorInternal(transformStream, e);\n  }\n  function TransformStreamCloseReadableInternal(transformStream) {\n    assert(transformStream._errored === false);\n    assert(transformStream._readableClosed === false);\n    try {\n      ReadableStreamDefaultControllerClose(transformStream._readableController);\n    } catch (e) {\n      assert(false);\n    }\n    transformStream._readableClosed = true;\n  }\n  function TransformStreamErrorIfNeeded(transformStream, e) {\n    if (transformStream._errored === false) {\n      TransformStreamErrorInternal(transformStream, e);\n    }\n  }\n  function TransformStreamErrorInternal(transformStream, e) {\n    assert(transformStream._errored === false);\n    transformStream._errored = true;\n    transformStream._storedError = e;\n    if (transformStream._writableDone === false) {\n      WritableStreamDefaultControllerError(transformStream._writableController, e);\n    }\n    if (transformStream._readableClosed === false) {\n      ReadableStreamDefaultControllerError(transformStream._readableController, e);\n    }\n  }\n  function TransformStreamReadableReadyPromise(transformStream) {\n    assert(transformStream._backpressureChangePromise !== undefined, '_backpressureChangePromise should have been initialized');\n    if (transformStream._backpressure === false) {\n      return Promise.resolve();\n    }\n    assert(transformStream._backpressure === true, '_backpressure should have been initialized');\n    return transformStream._backpressureChangePromise;\n  }\n  function TransformStreamSetBackpressure(transformStream, backpressure) {\n    assert(transformStream._backpressure !== backpressure, 'TransformStreamSetBackpressure() should be called only when backpressure is changed');\n    if (transformStream._backpressureChangePromise !== undefined) {\n      transformStream._backpressureChangePromise_resolve(backpressure);\n    }\n    transformStream._backpressureChangePromise = new Promise(function (resolve) {\n      transformStream._backpressureChangePromise_resolve = resolve;\n    });\n    transformStream._backpressureChangePromise.then(function (resolution) {\n      assert(resolution !== backpressure, '_backpressureChangePromise should be fulfilled only when backpressure is changed');\n    });\n    transformStream._backpressure = backpressure;\n  }\n  function TransformStreamDefaultTransform(chunk, transformStreamController) {\n    var transformStream = transformStreamController._controlledTransformStream;\n    TransformStreamEnqueueToReadable(transformStream, chunk);\n    return Promise.resolve();\n  }\n  function TransformStreamTransform(transformStream, chunk) {\n    assert(transformStream._errored === false);\n    assert(transformStream._transforming === false);\n    assert(transformStream._backpressure === false);\n    transformStream._transforming = true;\n    var transformer = transformStream._transformer;\n    var controller = transformStream._transformStreamController;\n    var transformPromise = PromiseInvokeOrPerformFallback(transformer, 'transform', [chunk, controller], TransformStreamDefaultTransform, [chunk, controller]);\n    return transformPromise.then(function () {\n      transformStream._transforming = false;\n      return TransformStreamReadableReadyPromise(transformStream);\n    }, function (e) {\n      TransformStreamErrorIfNeeded(transformStream, e);\n      return Promise.reject(e);\n    });\n  }\n  function IsTransformStreamDefaultController(x) {\n    if (!typeIsObject(x)) {\n      return false;\n    }\n    if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n      return false;\n    }\n    return true;\n  }\n  function IsTransformStream(x) {\n    if (!typeIsObject(x)) {\n      return false;\n    }\n    if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n      return false;\n    }\n    return true;\n  }\n  var TransformStreamSink = function () {\n    function TransformStreamSink(transformStream, startPromise) {\n      _classCallCheck(this, TransformStreamSink);\n      this._transformStream = transformStream;\n      this._startPromise = startPromise;\n    }\n    _createClass(TransformStreamSink, [{\n      key: 'start',\n      value: function start(c) {\n        var transformStream = this._transformStream;\n        transformStream._writableController = c;\n        return this._startPromise.then(function () {\n          return TransformStreamReadableReadyPromise(transformStream);\n        });\n      }\n    }, {\n      key: 'write',\n      value: function write(chunk) {\n        var transformStream = this._transformStream;\n        return TransformStreamTransform(transformStream, chunk);\n      }\n    }, {\n      key: 'abort',\n      value: function abort() {\n        var transformStream = this._transformStream;\n        transformStream._writableDone = true;\n        TransformStreamErrorInternal(transformStream, new TypeError('Writable side aborted'));\n      }\n    }, {\n      key: 'close',\n      value: function close() {\n        var transformStream = this._transformStream;\n        assert(transformStream._transforming === false);\n        transformStream._writableDone = true;\n        var flushPromise = PromiseInvokeOrNoop(transformStream._transformer, 'flush', [transformStream._transformStreamController]);\n        return flushPromise.then(function () {\n          if (transformStream._errored === true) {\n            return Promise.reject(transformStream._storedError);\n          }\n          if (transformStream._readableClosed === false) {\n            TransformStreamCloseReadableInternal(transformStream);\n          }\n          return Promise.resolve();\n        }).catch(function (r) {\n          TransformStreamErrorIfNeeded(transformStream, r);\n          return Promise.reject(transformStream._storedError);\n        });\n      }\n    }]);\n    return TransformStreamSink;\n  }();\n  var TransformStreamSource = function () {\n    function TransformStreamSource(transformStream, startPromise) {\n      _classCallCheck(this, TransformStreamSource);\n      this._transformStream = transformStream;\n      this._startPromise = startPromise;\n    }\n    _createClass(TransformStreamSource, [{\n      key: 'start',\n      value: function start(c) {\n        var transformStream = this._transformStream;\n        transformStream._readableController = c;\n        return this._startPromise.then(function () {\n          assert(transformStream._backpressureChangePromise !== undefined, '_backpressureChangePromise should have been initialized');\n          if (transformStream._backpressure === true) {\n            return Promise.resolve();\n          }\n          assert(transformStream._backpressure === false, '_backpressure should have been initialized');\n          return transformStream._backpressureChangePromise;\n        });\n      }\n    }, {\n      key: 'pull',\n      value: function pull() {\n        var transformStream = this._transformStream;\n        assert(transformStream._backpressure === true, 'pull() should be never called while _backpressure is false');\n        assert(transformStream._backpressureChangePromise !== undefined, '_backpressureChangePromise should have been initialized');\n        TransformStreamSetBackpressure(transformStream, false);\n        return transformStream._backpressureChangePromise;\n      }\n    }, {\n      key: 'cancel',\n      value: function cancel() {\n        var transformStream = this._transformStream;\n        transformStream._readableClosed = true;\n        TransformStreamErrorInternal(transformStream, new TypeError('Readable side canceled'));\n      }\n    }]);\n    return TransformStreamSource;\n  }();\n  var TransformStreamDefaultController = function () {\n    function TransformStreamDefaultController(transformStream) {\n      _classCallCheck(this, TransformStreamDefaultController);\n      if (IsTransformStream(transformStream) === false) {\n        throw new TypeError('TransformStreamDefaultController can only be ' + 'constructed with a TransformStream instance');\n      }\n      if (transformStream._transformStreamController !== undefined) {\n        throw new TypeError('TransformStreamDefaultController instances can ' + 'only be created by the TransformStream constructor');\n      }\n      this._controlledTransformStream = transformStream;\n    }\n    _createClass(TransformStreamDefaultController, [{\n      key: 'enqueue',\n      value: function enqueue(chunk) {\n        if (IsTransformStreamDefaultController(this) === false) {\n          throw defaultControllerBrandCheckException('enqueue');\n        }\n        TransformStreamEnqueueToReadable(this._controlledTransformStream, chunk);\n      }\n    }, {\n      key: 'close',\n      value: function close() {\n        if (IsTransformStreamDefaultController(this) === false) {\n          throw defaultControllerBrandCheckException('close');\n        }\n        TransformStreamCloseReadable(this._controlledTransformStream);\n      }\n    }, {\n      key: 'error',\n      value: function error(reason) {\n        if (IsTransformStreamDefaultController(this) === false) {\n          throw defaultControllerBrandCheckException('error');\n        }\n        TransformStreamError(this._controlledTransformStream, reason);\n      }\n    }, {\n      key: 'desiredSize',\n      get: function get() {\n        if (IsTransformStreamDefaultController(this) === false) {\n          throw defaultControllerBrandCheckException('desiredSize');\n        }\n        var transformStream = this._controlledTransformStream;\n        var readableController = transformStream._readableController;\n        return ReadableStreamDefaultControllerGetDesiredSize(readableController);\n      }\n    }]);\n    return TransformStreamDefaultController;\n  }();\n  var TransformStream = function () {\n    function TransformStream() {\n      var transformer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      _classCallCheck(this, TransformStream);\n      this._transformer = transformer;\n      var readableStrategy = transformer.readableStrategy,\n          writableStrategy = transformer.writableStrategy;\n      this._transforming = false;\n      this._errored = false;\n      this._storedError = undefined;\n      this._writableController = undefined;\n      this._readableController = undefined;\n      this._transformStreamController = undefined;\n      this._writableDone = false;\n      this._readableClosed = false;\n      this._backpressure = undefined;\n      this._backpressureChangePromise = undefined;\n      this._backpressureChangePromise_resolve = undefined;\n      this._transformStreamController = new TransformStreamDefaultController(this);\n      var startPromise_resolve = void 0;\n      var startPromise = new Promise(function (resolve) {\n        startPromise_resolve = resolve;\n      });\n      var source = new TransformStreamSource(this, startPromise);\n      this._readable = new ReadableStream(source, readableStrategy);\n      var sink = new TransformStreamSink(this, startPromise);\n      this._writable = new WritableStream(sink, writableStrategy);\n      assert(this._writableController !== undefined);\n      assert(this._readableController !== undefined);\n      var desiredSize = ReadableStreamDefaultControllerGetDesiredSize(this._readableController);\n      TransformStreamSetBackpressure(this, desiredSize <= 0);\n      var transformStream = this;\n      var startResult = InvokeOrNoop(transformer, 'start', [transformStream._transformStreamController]);\n      startPromise_resolve(startResult);\n      startPromise.catch(function (e) {\n        if (transformStream._errored === false) {\n          transformStream._errored = true;\n          transformStream._storedError = e;\n        }\n      });\n    }\n    _createClass(TransformStream, [{\n      key: 'readable',\n      get: function get() {\n        if (IsTransformStream(this) === false) {\n          throw streamBrandCheckException('readable');\n        }\n        return this._readable;\n      }\n    }, {\n      key: 'writable',\n      get: function get() {\n        if (IsTransformStream(this) === false) {\n          throw streamBrandCheckException('writable');\n        }\n        return this._writable;\n      }\n    }]);\n    return TransformStream;\n  }();\n  module.exports = { TransformStream: TransformStream };\n  function defaultControllerBrandCheckException(name) {\n    return new TypeError('TransformStreamDefaultController.prototype.' + name + ' can only be used on a TransformStreamDefaultController');\n  }\n  function streamBrandCheckException(name) {\n    return new TypeError('TransformStream.prototype.' + name + ' can only be used on a TransformStream');\n  }\n}, function (module, exports, __w_pdfjs_require__) {\n  module.exports = __w_pdfjs_require__(5);\n}]));\n\n/***/ }),\n/* 117 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n{\n  var isURLSupported = false;\n  try {\n    if (typeof URL === 'function' && _typeof(URL.prototype) === 'object' && 'origin' in URL.prototype) {\n      var u = new URL('b', 'http://a');\n      u.pathname = 'c%20d';\n      isURLSupported = u.href === 'http://a/c%20d';\n    }\n  } catch (ex) {}\n  if (isURLSupported) {\n    exports.URL = URL;\n  } else {\n    var PolyfillURL = __w_pdfjs_require__(118).URL;\n    var OriginalURL = __w_pdfjs_require__(4).URL;\n    if (OriginalURL) {\n      PolyfillURL.createObjectURL = function (blob) {\n        return OriginalURL.createObjectURL.apply(OriginalURL, arguments);\n      };\n      PolyfillURL.revokeObjectURL = function (url) {\n        OriginalURL.revokeObjectURL(url);\n      };\n    }\n    exports.URL = PolyfillURL;\n  }\n}\n\n/***/ }),\n/* 118 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\n(function URLConstructorClosure() {\n  'use strict';\n\n  var relative = Object.create(null);\n  relative['ftp'] = 21;\n  relative['file'] = 0;\n  relative['gopher'] = 70;\n  relative['http'] = 80;\n  relative['https'] = 443;\n  relative['ws'] = 80;\n  relative['wss'] = 443;\n  var relativePathDotMapping = Object.create(null);\n  relativePathDotMapping['%2e'] = '.';\n  relativePathDotMapping['.%2e'] = '..';\n  relativePathDotMapping['%2e.'] = '..';\n  relativePathDotMapping['%2e%2e'] = '..';\n  function isRelativeScheme(scheme) {\n    return relative[scheme] !== undefined;\n  }\n  function invalid() {\n    clear.call(this);\n    this._isInvalid = true;\n  }\n  function IDNAToASCII(h) {\n    if (h === '') {\n      invalid.call(this);\n    }\n    return h.toLowerCase();\n  }\n  function percentEscape(c) {\n    var unicode = c.charCodeAt(0);\n    if (unicode > 0x20 && unicode < 0x7F && [0x22, 0x23, 0x3C, 0x3E, 0x3F, 0x60].indexOf(unicode) === -1) {\n      return c;\n    }\n    return encodeURIComponent(c);\n  }\n  function percentEscapeQuery(c) {\n    var unicode = c.charCodeAt(0);\n    if (unicode > 0x20 && unicode < 0x7F && [0x22, 0x23, 0x3C, 0x3E, 0x60].indexOf(unicode) === -1) {\n      return c;\n    }\n    return encodeURIComponent(c);\n  }\n  var EOF,\n      ALPHA = /[a-zA-Z]/,\n      ALPHANUMERIC = /[a-zA-Z0-9\\+\\-\\.]/;\n  function parse(input, stateOverride, base) {\n    function err(message) {\n      errors.push(message);\n    }\n    var state = stateOverride || 'scheme start',\n        cursor = 0,\n        buffer = '',\n        seenAt = false,\n        seenBracket = false,\n        errors = [];\n    loop: while ((input[cursor - 1] !== EOF || cursor === 0) && !this._isInvalid) {\n      var c = input[cursor];\n      switch (state) {\n        case 'scheme start':\n          if (c && ALPHA.test(c)) {\n            buffer += c.toLowerCase();\n            state = 'scheme';\n          } else if (!stateOverride) {\n            buffer = '';\n            state = 'no scheme';\n            continue;\n          } else {\n            err('Invalid scheme.');\n            break loop;\n          }\n          break;\n        case 'scheme':\n          if (c && ALPHANUMERIC.test(c)) {\n            buffer += c.toLowerCase();\n          } else if (c === ':') {\n            this._scheme = buffer;\n            buffer = '';\n            if (stateOverride) {\n              break loop;\n            }\n            if (isRelativeScheme(this._scheme)) {\n              this._isRelative = true;\n            }\n            if (this._scheme === 'file') {\n              state = 'relative';\n            } else if (this._isRelative && base && base._scheme === this._scheme) {\n              state = 'relative or authority';\n            } else if (this._isRelative) {\n              state = 'authority first slash';\n            } else {\n              state = 'scheme data';\n            }\n          } else if (!stateOverride) {\n            buffer = '';\n            cursor = 0;\n            state = 'no scheme';\n            continue;\n          } else if (c === EOF) {\n            break loop;\n          } else {\n            err('Code point not allowed in scheme: ' + c);\n            break loop;\n          }\n          break;\n        case 'scheme data':\n          if (c === '?') {\n            this._query = '?';\n            state = 'query';\n          } else if (c === '#') {\n            this._fragment = '#';\n            state = 'fragment';\n          } else {\n            if (c !== EOF && c !== '\\t' && c !== '\\n' && c !== '\\r') {\n              this._schemeData += percentEscape(c);\n            }\n          }\n          break;\n        case 'no scheme':\n          if (!base || !isRelativeScheme(base._scheme)) {\n            err('Missing scheme.');\n            invalid.call(this);\n          } else {\n            state = 'relative';\n            continue;\n          }\n          break;\n        case 'relative or authority':\n          if (c === '/' && input[cursor + 1] === '/') {\n            state = 'authority ignore slashes';\n          } else {\n            err('Expected /, got: ' + c);\n            state = 'relative';\n            continue;\n          }\n          break;\n        case 'relative':\n          this._isRelative = true;\n          if (this._scheme !== 'file') {\n            this._scheme = base._scheme;\n          }\n          if (c === EOF) {\n            this._host = base._host;\n            this._port = base._port;\n            this._path = base._path.slice();\n            this._query = base._query;\n            this._username = base._username;\n            this._password = base._password;\n            break loop;\n          } else if (c === '/' || c === '\\\\') {\n            if (c === '\\\\') {\n              err('\\\\ is an invalid code point.');\n            }\n            state = 'relative slash';\n          } else if (c === '?') {\n            this._host = base._host;\n            this._port = base._port;\n            this._path = base._path.slice();\n            this._query = '?';\n            this._username = base._username;\n            this._password = base._password;\n            state = 'query';\n          } else if (c === '#') {\n            this._host = base._host;\n            this._port = base._port;\n            this._path = base._path.slice();\n            this._query = base._query;\n            this._fragment = '#';\n            this._username = base._username;\n            this._password = base._password;\n            state = 'fragment';\n          } else {\n            var nextC = input[cursor + 1];\n            var nextNextC = input[cursor + 2];\n            if (this._scheme !== 'file' || !ALPHA.test(c) || nextC !== ':' && nextC !== '|' || nextNextC !== EOF && nextNextC !== '/' && nextNextC !== '\\\\' && nextNextC !== '?' && nextNextC !== '#') {\n              this._host = base._host;\n              this._port = base._port;\n              this._username = base._username;\n              this._password = base._password;\n              this._path = base._path.slice();\n              this._path.pop();\n            }\n            state = 'relative path';\n            continue;\n          }\n          break;\n        case 'relative slash':\n          if (c === '/' || c === '\\\\') {\n            if (c === '\\\\') {\n              err('\\\\ is an invalid code point.');\n            }\n            if (this._scheme === 'file') {\n              state = 'file host';\n            } else {\n              state = 'authority ignore slashes';\n            }\n          } else {\n            if (this._scheme !== 'file') {\n              this._host = base._host;\n              this._port = base._port;\n              this._username = base._username;\n              this._password = base._password;\n            }\n            state = 'relative path';\n            continue;\n          }\n          break;\n        case 'authority first slash':\n          if (c === '/') {\n            state = 'authority second slash';\n          } else {\n            err('Expected \\'/\\', got: ' + c);\n            state = 'authority ignore slashes';\n            continue;\n          }\n          break;\n        case 'authority second slash':\n          state = 'authority ignore slashes';\n          if (c !== '/') {\n            err('Expected \\'/\\', got: ' + c);\n            continue;\n          }\n          break;\n        case 'authority ignore slashes':\n          if (c !== '/' && c !== '\\\\') {\n            state = 'authority';\n            continue;\n          } else {\n            err('Expected authority, got: ' + c);\n          }\n          break;\n        case 'authority':\n          if (c === '@') {\n            if (seenAt) {\n              err('@ already seen.');\n              buffer += '%40';\n            }\n            seenAt = true;\n            for (var i = 0; i < buffer.length; i++) {\n              var cp = buffer[i];\n              if (cp === '\\t' || cp === '\\n' || cp === '\\r') {\n                err('Invalid whitespace in authority.');\n                continue;\n              }\n              if (cp === ':' && this._password === null) {\n                this._password = '';\n                continue;\n              }\n              var tempC = percentEscape(cp);\n              if (this._password !== null) {\n                this._password += tempC;\n              } else {\n                this._username += tempC;\n              }\n            }\n            buffer = '';\n          } else if (c === EOF || c === '/' || c === '\\\\' || c === '?' || c === '#') {\n            cursor -= buffer.length;\n            buffer = '';\n            state = 'host';\n            continue;\n          } else {\n            buffer += c;\n          }\n          break;\n        case 'file host':\n          if (c === EOF || c === '/' || c === '\\\\' || c === '?' || c === '#') {\n            if (buffer.length === 2 && ALPHA.test(buffer[0]) && (buffer[1] === ':' || buffer[1] === '|')) {\n              state = 'relative path';\n            } else if (buffer.length === 0) {\n              state = 'relative path start';\n            } else {\n              this._host = IDNAToASCII.call(this, buffer);\n              buffer = '';\n              state = 'relative path start';\n            }\n            continue;\n          } else if (c === '\\t' || c === '\\n' || c === '\\r') {\n            err('Invalid whitespace in file host.');\n          } else {\n            buffer += c;\n          }\n          break;\n        case 'host':\n        case 'hostname':\n          if (c === ':' && !seenBracket) {\n            this._host = IDNAToASCII.call(this, buffer);\n            buffer = '';\n            state = 'port';\n            if (stateOverride === 'hostname') {\n              break loop;\n            }\n          } else if (c === EOF || c === '/' || c === '\\\\' || c === '?' || c === '#') {\n            this._host = IDNAToASCII.call(this, buffer);\n            buffer = '';\n            state = 'relative path start';\n            if (stateOverride) {\n              break loop;\n            }\n            continue;\n          } else if (c !== '\\t' && c !== '\\n' && c !== '\\r') {\n            if (c === '[') {\n              seenBracket = true;\n            } else if (c === ']') {\n              seenBracket = false;\n            }\n            buffer += c;\n          } else {\n            err('Invalid code point in host/hostname: ' + c);\n          }\n          break;\n        case 'port':\n          if (/[0-9]/.test(c)) {\n            buffer += c;\n          } else if (c === EOF || c === '/' || c === '\\\\' || c === '?' || c === '#' || stateOverride) {\n            if (buffer !== '') {\n              var temp = parseInt(buffer, 10);\n              if (temp !== relative[this._scheme]) {\n                this._port = temp + '';\n              }\n              buffer = '';\n            }\n            if (stateOverride) {\n              break loop;\n            }\n            state = 'relative path start';\n            continue;\n          } else if (c === '\\t' || c === '\\n' || c === '\\r') {\n            err('Invalid code point in port: ' + c);\n          } else {\n            invalid.call(this);\n          }\n          break;\n        case 'relative path start':\n          if (c === '\\\\') {\n            err('\\'\\\\\\' not allowed in path.');\n          }\n          state = 'relative path';\n          if (c !== '/' && c !== '\\\\') {\n            continue;\n          }\n          break;\n        case 'relative path':\n          if (c === EOF || c === '/' || c === '\\\\' || !stateOverride && (c === '?' || c === '#')) {\n            if (c === '\\\\') {\n              err('\\\\ not allowed in relative path.');\n            }\n            var tmp;\n            if (tmp = relativePathDotMapping[buffer.toLowerCase()]) {\n              buffer = tmp;\n            }\n            if (buffer === '..') {\n              this._path.pop();\n              if (c !== '/' && c !== '\\\\') {\n                this._path.push('');\n              }\n            } else if (buffer === '.' && c !== '/' && c !== '\\\\') {\n              this._path.push('');\n            } else if (buffer !== '.') {\n              if (this._scheme === 'file' && this._path.length === 0 && buffer.length === 2 && ALPHA.test(buffer[0]) && buffer[1] === '|') {\n                buffer = buffer[0] + ':';\n              }\n              this._path.push(buffer);\n            }\n            buffer = '';\n            if (c === '?') {\n              this._query = '?';\n              state = 'query';\n            } else if (c === '#') {\n              this._fragment = '#';\n              state = 'fragment';\n            }\n          } else if (c !== '\\t' && c !== '\\n' && c !== '\\r') {\n            buffer += percentEscape(c);\n          }\n          break;\n        case 'query':\n          if (!stateOverride && c === '#') {\n            this._fragment = '#';\n            state = 'fragment';\n          } else if (c !== EOF && c !== '\\t' && c !== '\\n' && c !== '\\r') {\n            this._query += percentEscapeQuery(c);\n          }\n          break;\n        case 'fragment':\n          if (c !== EOF && c !== '\\t' && c !== '\\n' && c !== '\\r') {\n            this._fragment += c;\n          }\n          break;\n      }\n      cursor++;\n    }\n  }\n  function clear() {\n    this._scheme = '';\n    this._schemeData = '';\n    this._username = '';\n    this._password = null;\n    this._host = '';\n    this._port = '';\n    this._path = [];\n    this._query = '';\n    this._fragment = '';\n    this._isInvalid = false;\n    this._isRelative = false;\n  }\n  function JURL(url, base) {\n    if (base !== undefined && !(base instanceof JURL)) {\n      base = new JURL(String(base));\n    }\n    this._url = url;\n    clear.call(this);\n    var input = url.replace(/^[ \\t\\r\\n\\f]+|[ \\t\\r\\n\\f]+$/g, '');\n    parse.call(this, input, null, base);\n  }\n  JURL.prototype = {\n    toString: function toString() {\n      return this.href;\n    },\n\n    get href() {\n      if (this._isInvalid) {\n        return this._url;\n      }\n      var authority = '';\n      if (this._username !== '' || this._password !== null) {\n        authority = this._username + (this._password !== null ? ':' + this._password : '') + '@';\n      }\n      return this.protocol + (this._isRelative ? '//' + authority + this.host : '') + this.pathname + this._query + this._fragment;\n    },\n    set href(value) {\n      clear.call(this);\n      parse.call(this, value);\n    },\n    get protocol() {\n      return this._scheme + ':';\n    },\n    set protocol(value) {\n      if (this._isInvalid) {\n        return;\n      }\n      parse.call(this, value + ':', 'scheme start');\n    },\n    get host() {\n      return this._isInvalid ? '' : this._port ? this._host + ':' + this._port : this._host;\n    },\n    set host(value) {\n      if (this._isInvalid || !this._isRelative) {\n        return;\n      }\n      parse.call(this, value, 'host');\n    },\n    get hostname() {\n      return this._host;\n    },\n    set hostname(value) {\n      if (this._isInvalid || !this._isRelative) {\n        return;\n      }\n      parse.call(this, value, 'hostname');\n    },\n    get port() {\n      return this._port;\n    },\n    set port(value) {\n      if (this._isInvalid || !this._isRelative) {\n        return;\n      }\n      parse.call(this, value, 'port');\n    },\n    get pathname() {\n      return this._isInvalid ? '' : this._isRelative ? '/' + this._path.join('/') : this._schemeData;\n    },\n    set pathname(value) {\n      if (this._isInvalid || !this._isRelative) {\n        return;\n      }\n      this._path = [];\n      parse.call(this, value, 'relative path start');\n    },\n    get search() {\n      return this._isInvalid || !this._query || this._query === '?' ? '' : this._query;\n    },\n    set search(value) {\n      if (this._isInvalid || !this._isRelative) {\n        return;\n      }\n      this._query = '?';\n      if (value[0] === '?') {\n        value = value.slice(1);\n      }\n      parse.call(this, value, 'query');\n    },\n    get hash() {\n      return this._isInvalid || !this._fragment || this._fragment === '#' ? '' : this._fragment;\n    },\n    set hash(value) {\n      if (this._isInvalid) {\n        return;\n      }\n      this._fragment = '#';\n      if (value[0] === '#') {\n        value = value.slice(1);\n      }\n      parse.call(this, value, 'fragment');\n    },\n    get origin() {\n      var host;\n      if (this._isInvalid || !this._scheme) {\n        return '';\n      }\n      switch (this._scheme) {\n        case 'data':\n        case 'file':\n        case 'javascript':\n        case 'mailto':\n          return 'null';\n        case 'blob':\n          try {\n            return new JURL(this._schemeData).origin || 'null';\n          } catch (_) {}\n          return 'null';\n      }\n      host = this.host;\n      if (!host) {\n        return '';\n      }\n      return this._scheme + '://' + host;\n    }\n  };\n  exports.URL = JURL;\n})();\n\n/***/ }),\n/* 119 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.NetworkPdfManager = exports.LocalPdfManager = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _chunked_stream = __w_pdfjs_require__(120);\n\nvar _document = __w_pdfjs_require__(121);\n\nvar _stream = __w_pdfjs_require__(125);\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar BasePdfManager = function () {\n  function BasePdfManager() {\n    _classCallCheck(this, BasePdfManager);\n\n    if (this.constructor === BasePdfManager) {\n      (0, _util.unreachable)('Cannot initialize BasePdfManager.');\n    }\n  }\n\n  _createClass(BasePdfManager, [{\n    key: 'onLoadedStream',\n    value: function onLoadedStream() {\n      (0, _util.unreachable)('Abstract method `onLoadedStream` called');\n    }\n  }, {\n    key: 'ensureDoc',\n    value: function ensureDoc(prop, args) {\n      return this.ensure(this.pdfDocument, prop, args);\n    }\n  }, {\n    key: 'ensureXRef',\n    value: function ensureXRef(prop, args) {\n      return this.ensure(this.pdfDocument.xref, prop, args);\n    }\n  }, {\n    key: 'ensureCatalog',\n    value: function ensureCatalog(prop, args) {\n      return this.ensure(this.pdfDocument.catalog, prop, args);\n    }\n  }, {\n    key: 'getPage',\n    value: function getPage(pageIndex) {\n      return this.pdfDocument.getPage(pageIndex);\n    }\n  }, {\n    key: 'cleanup',\n    value: function cleanup() {\n      return this.pdfDocument.cleanup();\n    }\n  }, {\n    key: 'ensure',\n    value: function ensure(obj, prop, args) {\n      (0, _util.unreachable)('Abstract method `ensure` called');\n    }\n  }, {\n    key: 'requestRange',\n    value: function requestRange(begin, end) {\n      (0, _util.unreachable)('Abstract method `requestRange` called');\n    }\n  }, {\n    key: 'requestLoadedStream',\n    value: function requestLoadedStream() {\n      (0, _util.unreachable)('Abstract method `requestLoadedStream` called');\n    }\n  }, {\n    key: 'sendProgressiveData',\n    value: function sendProgressiveData(chunk) {\n      (0, _util.unreachable)('Abstract method `sendProgressiveData` called');\n    }\n  }, {\n    key: 'updatePassword',\n    value: function updatePassword(password) {\n      this._password = password;\n    }\n  }, {\n    key: 'terminate',\n    value: function terminate() {\n      (0, _util.unreachable)('Abstract method `terminate` called');\n    }\n  }, {\n    key: 'docId',\n    get: function get() {\n      return this._docId;\n    }\n  }, {\n    key: 'password',\n    get: function get() {\n      return this._password;\n    }\n  }, {\n    key: 'docBaseUrl',\n    get: function get() {\n      var docBaseUrl = null;\n      if (this._docBaseUrl) {\n        var absoluteUrl = (0, _util.createValidAbsoluteUrl)(this._docBaseUrl);\n        if (absoluteUrl) {\n          docBaseUrl = absoluteUrl.href;\n        } else {\n          (0, _util.warn)('Invalid absolute docBaseUrl: \"' + this._docBaseUrl + '\".');\n        }\n      }\n      return (0, _util.shadow)(this, 'docBaseUrl', docBaseUrl);\n    }\n  }]);\n\n  return BasePdfManager;\n}();\n\nvar LocalPdfManager = function (_BasePdfManager) {\n  _inherits(LocalPdfManager, _BasePdfManager);\n\n  function LocalPdfManager(docId, data, password, evaluatorOptions, docBaseUrl) {\n    _classCallCheck(this, LocalPdfManager);\n\n    var _this = _possibleConstructorReturn(this, (LocalPdfManager.__proto__ || Object.getPrototypeOf(LocalPdfManager)).call(this));\n\n    _this._docId = docId;\n    _this._password = password;\n    _this._docBaseUrl = docBaseUrl;\n    _this.evaluatorOptions = evaluatorOptions;\n    var stream = new _stream.Stream(data);\n    _this.pdfDocument = new _document.PDFDocument(_this, stream);\n    _this._loadedStreamPromise = Promise.resolve(stream);\n    return _this;\n  }\n\n  _createClass(LocalPdfManager, [{\n    key: 'ensure',\n    value: function ensure(obj, prop, args) {\n      return new Promise(function (resolve) {\n        var value = obj[prop];\n        if (typeof value === 'function') {\n          resolve(value.apply(obj, args));\n        } else {\n          resolve(value);\n        }\n      });\n    }\n  }, {\n    key: 'requestRange',\n    value: function requestRange(begin, end) {\n      return Promise.resolve();\n    }\n  }, {\n    key: 'requestLoadedStream',\n    value: function requestLoadedStream() {}\n  }, {\n    key: 'onLoadedStream',\n    value: function onLoadedStream() {\n      return this._loadedStreamPromise;\n    }\n  }, {\n    key: 'terminate',\n    value: function terminate() {}\n  }]);\n\n  return LocalPdfManager;\n}(BasePdfManager);\n\nvar NetworkPdfManager = function (_BasePdfManager2) {\n  _inherits(NetworkPdfManager, _BasePdfManager2);\n\n  function NetworkPdfManager(docId, pdfNetworkStream, args, evaluatorOptions, docBaseUrl) {\n    _classCallCheck(this, NetworkPdfManager);\n\n    var _this2 = _possibleConstructorReturn(this, (NetworkPdfManager.__proto__ || Object.getPrototypeOf(NetworkPdfManager)).call(this));\n\n    _this2._docId = docId;\n    _this2._password = args.password;\n    _this2._docBaseUrl = docBaseUrl;\n    _this2.msgHandler = args.msgHandler;\n    _this2.evaluatorOptions = evaluatorOptions;\n    _this2.streamManager = new _chunked_stream.ChunkedStreamManager(pdfNetworkStream, {\n      msgHandler: args.msgHandler,\n      url: args.url,\n      length: args.length,\n      disableAutoFetch: args.disableAutoFetch,\n      rangeChunkSize: args.rangeChunkSize\n    });\n    _this2.pdfDocument = new _document.PDFDocument(_this2, _this2.streamManager.getStream());\n    return _this2;\n  }\n\n  _createClass(NetworkPdfManager, [{\n    key: 'ensure',\n    value: function ensure(obj, prop, args) {\n      var _this3 = this;\n\n      return new Promise(function (resolve, reject) {\n        var ensureHelper = function ensureHelper() {\n          try {\n            var value = obj[prop];\n            var result = void 0;\n            if (typeof value === 'function') {\n              result = value.apply(obj, args);\n            } else {\n              result = value;\n            }\n            resolve(result);\n          } catch (ex) {\n            if (!(ex instanceof _util.MissingDataException)) {\n              reject(ex);\n              return;\n            }\n            _this3.streamManager.requestRange(ex.begin, ex.end).then(ensureHelper, reject);\n          }\n        };\n        ensureHelper();\n      });\n    }\n  }, {\n    key: 'requestRange',\n    value: function requestRange(begin, end) {\n      return this.streamManager.requestRange(begin, end);\n    }\n  }, {\n    key: 'requestLoadedStream',\n    value: function requestLoadedStream() {\n      this.streamManager.requestAllChunks();\n    }\n  }, {\n    key: 'sendProgressiveData',\n    value: function sendProgressiveData(chunk) {\n      this.streamManager.onReceiveData({ chunk: chunk });\n    }\n  }, {\n    key: 'onLoadedStream',\n    value: function onLoadedStream() {\n      return this.streamManager.onLoadedStream();\n    }\n  }, {\n    key: 'terminate',\n    value: function terminate() {\n      this.streamManager.abort();\n    }\n  }]);\n\n  return NetworkPdfManager;\n}(BasePdfManager);\n\nexports.LocalPdfManager = LocalPdfManager;\nexports.NetworkPdfManager = NetworkPdfManager;\n\n/***/ }),\n/* 120 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ChunkedStreamManager = exports.ChunkedStream = undefined;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar ChunkedStream = function ChunkedStreamClosure() {\n  function ChunkedStream(length, chunkSize, manager) {\n    this.bytes = new Uint8Array(length);\n    this.start = 0;\n    this.pos = 0;\n    this.end = length;\n    this.chunkSize = chunkSize;\n    this.loadedChunks = [];\n    this.numChunksLoaded = 0;\n    this.numChunks = Math.ceil(length / chunkSize);\n    this.manager = manager;\n    this.progressiveDataLength = 0;\n    this.lastSuccessfulEnsureByteChunk = -1;\n  }\n  ChunkedStream.prototype = {\n    getMissingChunks: function ChunkedStream_getMissingChunks() {\n      var chunks = [];\n      for (var chunk = 0, n = this.numChunks; chunk < n; ++chunk) {\n        if (!this.loadedChunks[chunk]) {\n          chunks.push(chunk);\n        }\n      }\n      return chunks;\n    },\n    getBaseStreams: function ChunkedStream_getBaseStreams() {\n      return [this];\n    },\n    allChunksLoaded: function ChunkedStream_allChunksLoaded() {\n      return this.numChunksLoaded === this.numChunks;\n    },\n    onReceiveData: function ChunkedStream_onReceiveData(begin, chunk) {\n      var end = begin + chunk.byteLength;\n      if (begin % this.chunkSize !== 0) {\n        throw new Error('Bad begin offset: ' + begin);\n      }\n      var length = this.bytes.length;\n      if (end % this.chunkSize !== 0 && end !== length) {\n        throw new Error('Bad end offset: ' + end);\n      }\n      this.bytes.set(new Uint8Array(chunk), begin);\n      var chunkSize = this.chunkSize;\n      var beginChunk = Math.floor(begin / chunkSize);\n      var endChunk = Math.floor((end - 1) / chunkSize) + 1;\n      var curChunk;\n      for (curChunk = beginChunk; curChunk < endChunk; ++curChunk) {\n        if (!this.loadedChunks[curChunk]) {\n          this.loadedChunks[curChunk] = true;\n          ++this.numChunksLoaded;\n        }\n      }\n    },\n    onReceiveProgressiveData: function ChunkedStream_onReceiveProgressiveData(data) {\n      var position = this.progressiveDataLength;\n      var beginChunk = Math.floor(position / this.chunkSize);\n      this.bytes.set(new Uint8Array(data), position);\n      position += data.byteLength;\n      this.progressiveDataLength = position;\n      var endChunk = position >= this.end ? this.numChunks : Math.floor(position / this.chunkSize);\n      var curChunk;\n      for (curChunk = beginChunk; curChunk < endChunk; ++curChunk) {\n        if (!this.loadedChunks[curChunk]) {\n          this.loadedChunks[curChunk] = true;\n          ++this.numChunksLoaded;\n        }\n      }\n    },\n    ensureByte: function ChunkedStream_ensureByte(pos) {\n      var chunk = Math.floor(pos / this.chunkSize);\n      if (chunk === this.lastSuccessfulEnsureByteChunk) {\n        return;\n      }\n      if (!this.loadedChunks[chunk]) {\n        throw new _util.MissingDataException(pos, pos + 1);\n      }\n      this.lastSuccessfulEnsureByteChunk = chunk;\n    },\n    ensureRange: function ChunkedStream_ensureRange(begin, end) {\n      if (begin >= end) {\n        return;\n      }\n      if (end <= this.progressiveDataLength) {\n        return;\n      }\n      var chunkSize = this.chunkSize;\n      var beginChunk = Math.floor(begin / chunkSize);\n      var endChunk = Math.floor((end - 1) / chunkSize) + 1;\n      for (var chunk = beginChunk; chunk < endChunk; ++chunk) {\n        if (!this.loadedChunks[chunk]) {\n          throw new _util.MissingDataException(begin, end);\n        }\n      }\n    },\n    nextEmptyChunk: function ChunkedStream_nextEmptyChunk(beginChunk) {\n      var chunk,\n          numChunks = this.numChunks;\n      for (var i = 0; i < numChunks; ++i) {\n        chunk = (beginChunk + i) % numChunks;\n        if (!this.loadedChunks[chunk]) {\n          return chunk;\n        }\n      }\n      return null;\n    },\n    hasChunk: function ChunkedStream_hasChunk(chunk) {\n      return !!this.loadedChunks[chunk];\n    },\n    get length() {\n      return this.end - this.start;\n    },\n    get isEmpty() {\n      return this.length === 0;\n    },\n    getByte: function ChunkedStream_getByte() {\n      var pos = this.pos;\n      if (pos >= this.end) {\n        return -1;\n      }\n      this.ensureByte(pos);\n      return this.bytes[this.pos++];\n    },\n    getUint16: function ChunkedStream_getUint16() {\n      var b0 = this.getByte();\n      var b1 = this.getByte();\n      if (b0 === -1 || b1 === -1) {\n        return -1;\n      }\n      return (b0 << 8) + b1;\n    },\n    getInt32: function ChunkedStream_getInt32() {\n      var b0 = this.getByte();\n      var b1 = this.getByte();\n      var b2 = this.getByte();\n      var b3 = this.getByte();\n      return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;\n    },\n    getBytes: function getBytes(length) {\n      var forceClamped = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n      var bytes = this.bytes;\n      var pos = this.pos;\n      var strEnd = this.end;\n      if (!length) {\n        this.ensureRange(pos, strEnd);\n        var _subarray = bytes.subarray(pos, strEnd);\n        return forceClamped ? new Uint8ClampedArray(_subarray) : _subarray;\n      }\n      var end = pos + length;\n      if (end > strEnd) {\n        end = strEnd;\n      }\n      this.ensureRange(pos, end);\n      this.pos = end;\n      var subarray = bytes.subarray(pos, end);\n      return forceClamped ? new Uint8ClampedArray(subarray) : subarray;\n    },\n\n    peekByte: function ChunkedStream_peekByte() {\n      var peekedByte = this.getByte();\n      this.pos--;\n      return peekedByte;\n    },\n    peekBytes: function peekBytes(length) {\n      var forceClamped = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n      var bytes = this.getBytes(length, forceClamped);\n      this.pos -= bytes.length;\n      return bytes;\n    },\n\n    getByteRange: function ChunkedStream_getBytes(begin, end) {\n      this.ensureRange(begin, end);\n      return this.bytes.subarray(begin, end);\n    },\n    skip: function ChunkedStream_skip(n) {\n      if (!n) {\n        n = 1;\n      }\n      this.pos += n;\n    },\n    reset: function ChunkedStream_reset() {\n      this.pos = this.start;\n    },\n    moveStart: function ChunkedStream_moveStart() {\n      this.start = this.pos;\n    },\n    makeSubStream: function ChunkedStream_makeSubStream(start, length, dict) {\n      this.ensureRange(start, start + length);\n      function ChunkedStreamSubstream() {}\n      ChunkedStreamSubstream.prototype = Object.create(this);\n      ChunkedStreamSubstream.prototype.getMissingChunks = function () {\n        var chunkSize = this.chunkSize;\n        var beginChunk = Math.floor(this.start / chunkSize);\n        var endChunk = Math.floor((this.end - 1) / chunkSize) + 1;\n        var missingChunks = [];\n        for (var chunk = beginChunk; chunk < endChunk; ++chunk) {\n          if (!this.loadedChunks[chunk]) {\n            missingChunks.push(chunk);\n          }\n        }\n        return missingChunks;\n      };\n      var 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  };\n  return ChunkedStream;\n}();\nvar ChunkedStreamManager = function ChunkedStreamManagerClosure() {\n  function ChunkedStreamManager(pdfNetworkStream, args) {\n    var chunkSize = args.rangeChunkSize;\n    var length = args.length;\n    this.stream = new ChunkedStream(length, chunkSize, this);\n    this.length = length;\n    this.chunkSize = chunkSize;\n    this.pdfNetworkStream = pdfNetworkStream;\n    this.url = args.url;\n    this.disableAutoFetch = args.disableAutoFetch;\n    this.msgHandler = args.msgHandler;\n    this.currRequestId = 0;\n    this.chunksNeededByRequest = Object.create(null);\n    this.requestsByChunk = Object.create(null);\n    this.promisesByRequest = Object.create(null);\n    this.progressiveDataLength = 0;\n    this.aborted = false;\n    this._loadedStreamCapability = (0, _util.createPromiseCapability)();\n  }\n  ChunkedStreamManager.prototype = {\n    onLoadedStream: function ChunkedStreamManager_getLoadedStream() {\n      return this._loadedStreamCapability.promise;\n    },\n    sendRequest: function ChunkedStreamManager_sendRequest(begin, end) {\n      var _this = this;\n\n      var rangeReader = this.pdfNetworkStream.getRangeReader(begin, end);\n      if (!rangeReader.isStreamingSupported) {\n        rangeReader.onProgress = this.onProgress.bind(this);\n      }\n      var chunks = [],\n          loaded = 0;\n      var manager = this;\n      var promise = new Promise(function (resolve, reject) {\n        var readChunk = function readChunk(chunk) {\n          try {\n            if (!chunk.done) {\n              var data = chunk.value;\n              chunks.push(data);\n              loaded += (0, _util.arrayByteLength)(data);\n              if (rangeReader.isStreamingSupported) {\n                manager.onProgress({ loaded: loaded });\n              }\n              rangeReader.read().then(readChunk, reject);\n              return;\n            }\n            var chunkData = (0, _util.arraysToBytes)(chunks);\n            chunks = null;\n            resolve(chunkData);\n          } catch (e) {\n            reject(e);\n          }\n        };\n        rangeReader.read().then(readChunk, reject);\n      });\n      promise.then(function (data) {\n        if (_this.aborted) {\n          return;\n        }\n        _this.onReceiveData({\n          chunk: data,\n          begin: begin\n        });\n      });\n    },\n    requestAllChunks: function ChunkedStreamManager_requestAllChunks() {\n      var missingChunks = this.stream.getMissingChunks();\n      this._requestChunks(missingChunks);\n      return this._loadedStreamCapability.promise;\n    },\n    _requestChunks: function ChunkedStreamManager_requestChunks(chunks) {\n      var requestId = this.currRequestId++;\n      var i, ii;\n      var chunksNeeded = Object.create(null);\n      this.chunksNeededByRequest[requestId] = chunksNeeded;\n      for (i = 0, ii = chunks.length; i < ii; i++) {\n        if (!this.stream.hasChunk(chunks[i])) {\n          chunksNeeded[chunks[i]] = true;\n        }\n      }\n      if ((0, _util.isEmptyObj)(chunksNeeded)) {\n        return Promise.resolve();\n      }\n      var capability = (0, _util.createPromiseCapability)();\n      this.promisesByRequest[requestId] = capability;\n      var chunksToRequest = [];\n      for (var chunk in chunksNeeded) {\n        chunk = chunk | 0;\n        if (!(chunk in this.requestsByChunk)) {\n          this.requestsByChunk[chunk] = [];\n          chunksToRequest.push(chunk);\n        }\n        this.requestsByChunk[chunk].push(requestId);\n      }\n      if (!chunksToRequest.length) {\n        return capability.promise;\n      }\n      var groupedChunksToRequest = this.groupChunks(chunksToRequest);\n      for (i = 0; i < groupedChunksToRequest.length; ++i) {\n        var groupedChunk = groupedChunksToRequest[i];\n        var begin = groupedChunk.beginChunk * this.chunkSize;\n        var end = Math.min(groupedChunk.endChunk * this.chunkSize, this.length);\n        this.sendRequest(begin, end);\n      }\n      return capability.promise;\n    },\n    getStream: function ChunkedStreamManager_getStream() {\n      return this.stream;\n    },\n    requestRange: function ChunkedStreamManager_requestRange(begin, end) {\n      end = Math.min(end, this.length);\n      var beginChunk = this.getBeginChunk(begin);\n      var endChunk = this.getEndChunk(end);\n      var chunks = [];\n      for (var chunk = beginChunk; chunk < endChunk; ++chunk) {\n        chunks.push(chunk);\n      }\n      return this._requestChunks(chunks);\n    },\n    requestRanges: function ChunkedStreamManager_requestRanges(ranges) {\n      ranges = ranges || [];\n      var chunksToRequest = [];\n      for (var i = 0; i < ranges.length; i++) {\n        var beginChunk = this.getBeginChunk(ranges[i].begin);\n        var endChunk = this.getEndChunk(ranges[i].end);\n        for (var 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: function ChunkedStreamManager_groupChunks(chunks) {\n      var groupedChunks = [];\n      var beginChunk = -1;\n      var prevChunk = -1;\n      for (var i = 0; i < chunks.length; ++i) {\n        var chunk = chunks[i];\n        if (beginChunk < 0) {\n          beginChunk = chunk;\n        }\n        if (prevChunk >= 0 && prevChunk + 1 !== chunk) {\n          groupedChunks.push({\n            beginChunk: beginChunk,\n            endChunk: prevChunk + 1\n          });\n          beginChunk = chunk;\n        }\n        if (i + 1 === chunks.length) {\n          groupedChunks.push({\n            beginChunk: beginChunk,\n            endChunk: chunk + 1\n          });\n        }\n        prevChunk = chunk;\n      }\n      return groupedChunks;\n    },\n    onProgress: function ChunkedStreamManager_onProgress(args) {\n      var bytesLoaded = this.stream.numChunksLoaded * this.chunkSize + args.loaded;\n      this.msgHandler.send('DocProgress', {\n        loaded: bytesLoaded,\n        total: this.length\n      });\n    },\n    onReceiveData: function ChunkedStreamManager_onReceiveData(args) {\n      var chunk = args.chunk;\n      var isProgressive = args.begin === undefined;\n      var begin = isProgressive ? this.progressiveDataLength : args.begin;\n      var end = begin + chunk.byteLength;\n      var beginChunk = Math.floor(begin / this.chunkSize);\n      var 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.allChunksLoaded()) {\n        this._loadedStreamCapability.resolve(this.stream);\n      }\n      var loadedRequests = [];\n      var i, requestId;\n      for (chunk = beginChunk; chunk < endChunk; ++chunk) {\n        var requestIds = this.requestsByChunk[chunk] || [];\n        delete this.requestsByChunk[chunk];\n        for (i = 0; i < requestIds.length; ++i) {\n          requestId = requestIds[i];\n          var chunksNeeded = this.chunksNeededByRequest[requestId];\n          if (chunk in chunksNeeded) {\n            delete chunksNeeded[chunk];\n          }\n          if (!(0, _util.isEmptyObj)(chunksNeeded)) {\n            continue;\n          }\n          loadedRequests.push(requestId);\n        }\n      }\n      if (!this.disableAutoFetch && (0, _util.isEmptyObj)(this.requestsByChunk)) {\n        var nextEmptyChunk;\n        if (this.stream.numChunksLoaded === 1) {\n          var 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 (i = 0; i < loadedRequests.length; ++i) {\n        requestId = loadedRequests[i];\n        var capability = this.promisesByRequest[requestId];\n        delete this.promisesByRequest[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: function ChunkedStreamManager_onError(err) {\n      this._loadedStreamCapability.reject(err);\n    },\n    getBeginChunk: function ChunkedStreamManager_getBeginChunk(begin) {\n      var chunk = Math.floor(begin / this.chunkSize);\n      return chunk;\n    },\n    getEndChunk: function ChunkedStreamManager_getEndChunk(end) {\n      var chunk = Math.floor((end - 1) / this.chunkSize) + 1;\n      return chunk;\n    },\n    abort: function ChunkedStreamManager_abort() {\n      this.aborted = true;\n      if (this.pdfNetworkStream) {\n        this.pdfNetworkStream.cancelAllRequests('abort');\n      }\n      for (var requestId in this.promisesByRequest) {\n        var capability = this.promisesByRequest[requestId];\n        capability.reject(new Error('Request was aborted'));\n      }\n    }\n  };\n  return ChunkedStreamManager;\n}();\nexports.ChunkedStream = ChunkedStream;\nexports.ChunkedStreamManager = ChunkedStreamManager;\n\n/***/ }),\n/* 121 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.PDFDocument = exports.Page = undefined;\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _obj = __w_pdfjs_require__(122);\n\nvar _primitives = __w_pdfjs_require__(123);\n\nvar _stream = __w_pdfjs_require__(125);\n\nvar _annotation = __w_pdfjs_require__(137);\n\nvar _crypto = __w_pdfjs_require__(135);\n\nvar _parser = __w_pdfjs_require__(124);\n\nvar _operator_list = __w_pdfjs_require__(138);\n\nvar _evaluator = __w_pdfjs_require__(139);\n\nvar _function = __w_pdfjs_require__(153);\n\nvar Page = function PageClosure() {\n  var DEFAULT_USER_UNIT = 1.0;\n  var LETTER_SIZE_MEDIABOX = [0, 0, 612, 792];\n  function isAnnotationRenderable(annotation, intent) {\n    return intent === 'display' && annotation.viewable || intent === 'print' && annotation.printable;\n  }\n  function Page(_ref) {\n    var pdfManager = _ref.pdfManager,\n        xref = _ref.xref,\n        pageIndex = _ref.pageIndex,\n        pageDict = _ref.pageDict,\n        ref = _ref.ref,\n        fontCache = _ref.fontCache,\n        builtInCMapCache = _ref.builtInCMapCache,\n        pdfFunctionFactory = _ref.pdfFunctionFactory;\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.pdfFunctionFactory = pdfFunctionFactory;\n    this.evaluatorOptions = pdfManager.evaluatorOptions;\n    this.resourcesPromise = null;\n    var uniquePrefix = 'p' + this.pageIndex + '_';\n    var idCounters = { obj: 0 };\n    this.idFactory = {\n      createObjId: function createObjId() {\n        return uniquePrefix + ++idCounters.obj;\n      }\n    };\n  }\n  Page.prototype = {\n    _getInheritableProperty: function _getInheritableProperty(key) {\n      var getArray = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n      var value = (0, _util.getInheritableProperty)({\n        dict: this.pageDict,\n        key: key,\n        getArray: getArray,\n        stopWhenFound: false\n      });\n      if (!Array.isArray(value)) {\n        return value;\n      }\n      if (value.length === 1 || !(0, _primitives.isDict)(value[0])) {\n        return value[0];\n      }\n      return _primitives.Dict.merge(this.xref, value);\n    },\n\n    get content() {\n      return this.pageDict.get('Contents');\n    },\n    get resources() {\n      return (0, _util.shadow)(this, 'resources', this._getInheritableProperty('Resources') || _primitives.Dict.empty);\n    },\n    get mediaBox() {\n      var mediaBox = this._getInheritableProperty('MediaBox', true);\n      if (!Array.isArray(mediaBox) || mediaBox.length !== 4) {\n        return (0, _util.shadow)(this, 'mediaBox', LETTER_SIZE_MEDIABOX);\n      }\n      return (0, _util.shadow)(this, 'mediaBox', mediaBox);\n    },\n    get cropBox() {\n      var cropBox = this._getInheritableProperty('CropBox', true);\n      if (!Array.isArray(cropBox) || cropBox.length !== 4) {\n        return (0, _util.shadow)(this, 'cropBox', this.mediaBox);\n      }\n      return (0, _util.shadow)(this, 'cropBox', cropBox);\n    },\n    get userUnit() {\n      var obj = this.pageDict.get('UserUnit');\n      if (!(0, _util.isNum)(obj) || obj <= 0) {\n        obj = DEFAULT_USER_UNIT;\n      }\n      return (0, _util.shadow)(this, 'userUnit', obj);\n    },\n    get view() {\n      var mediaBox = this.mediaBox,\n          cropBox = this.cropBox;\n      if (mediaBox === cropBox) {\n        return (0, _util.shadow)(this, 'view', mediaBox);\n      }\n      var intersection = _util.Util.intersect(cropBox, mediaBox);\n      return (0, _util.shadow)(this, 'view', intersection || mediaBox);\n    },\n    get rotate() {\n      var rotate = this._getInheritableProperty('Rotate') || 0;\n      if (rotate % 90 !== 0) {\n        rotate = 0;\n      } else if (rotate >= 360) {\n        rotate = rotate % 360;\n      } else if (rotate < 0) {\n        rotate = (rotate % 360 + 360) % 360;\n      }\n      return (0, _util.shadow)(this, 'rotate', rotate);\n    },\n    getContentStream: function Page_getContentStream() {\n      var content = this.content;\n      var stream;\n      if (Array.isArray(content)) {\n        var xref = this.xref;\n        var i,\n            n = content.length;\n        var streams = [];\n        for (i = 0; i < n; ++i) {\n          streams.push(xref.fetchIfRef(content[i]));\n        }\n        stream = new _stream.StreamsSequenceStream(streams);\n      } else if ((0, _primitives.isStream)(content)) {\n        stream = content;\n      } else {\n        stream = new _stream.NullStream();\n      }\n      return stream;\n    },\n    loadResources: function Page_loadResources(keys) {\n      var _this = this;\n\n      if (!this.resourcesPromise) {\n        this.resourcesPromise = this.pdfManager.ensure(this, 'resources');\n      }\n      return this.resourcesPromise.then(function () {\n        var objectLoader = new _obj.ObjectLoader(_this.resources, keys, _this.xref);\n        return objectLoader.load();\n      });\n    },\n    getOperatorList: function getOperatorList(_ref2) {\n      var _this2 = this;\n\n      var handler = _ref2.handler,\n          task = _ref2.task,\n          intent = _ref2.intent,\n          renderInteractiveForms = _ref2.renderInteractiveForms;\n\n      var contentStreamPromise = this.pdfManager.ensure(this, 'getContentStream');\n      var resourcesPromise = this.loadResources(['ExtGState', 'ColorSpace', 'Pattern', 'Shading', 'XObject', 'Font']);\n      var partialEvaluator = new _evaluator.PartialEvaluator({\n        pdfManager: this.pdfManager,\n        xref: this.xref,\n        handler: handler,\n        pageIndex: this.pageIndex,\n        idFactory: this.idFactory,\n        fontCache: this.fontCache,\n        builtInCMapCache: this.builtInCMapCache,\n        options: this.evaluatorOptions,\n        pdfFunctionFactory: this.pdfFunctionFactory\n      });\n      var dataPromises = Promise.all([contentStreamPromise, resourcesPromise]);\n      var pageListPromise = dataPromises.then(function (_ref3) {\n        var _ref4 = _slicedToArray(_ref3, 1),\n            contentStream = _ref4[0];\n\n        var opList = new _operator_list.OperatorList(intent, handler, _this2.pageIndex);\n        handler.send('StartRenderPage', {\n          transparency: partialEvaluator.hasBlendModes(_this2.resources),\n          pageIndex: _this2.pageIndex,\n          intent: intent\n        });\n        return partialEvaluator.getOperatorList({\n          stream: contentStream,\n          task: task,\n          resources: _this2.resources,\n          operatorList: opList\n        }).then(function () {\n          return opList;\n        });\n      });\n      var annotationsPromise = this.pdfManager.ensure(this, 'annotations');\n      return Promise.all([pageListPromise, annotationsPromise]).then(function (_ref5) {\n        var _ref6 = _slicedToArray(_ref5, 2),\n            pageOpList = _ref6[0],\n            annotations = _ref6[1];\n\n        if (annotations.length === 0) {\n          pageOpList.flush(true);\n          return pageOpList;\n        }\n        var i,\n            ii,\n            opListPromises = [];\n        for (i = 0, ii = annotations.length; i < ii; i++) {\n          if (isAnnotationRenderable(annotations[i], intent)) {\n            opListPromises.push(annotations[i].getOperatorList(partialEvaluator, task, renderInteractiveForms));\n          }\n        }\n        return Promise.all(opListPromises).then(function (opLists) {\n          pageOpList.addOp(_util.OPS.beginAnnotations, []);\n          for (i = 0, ii = opLists.length; i < ii; i++) {\n            pageOpList.addOpList(opLists[i]);\n          }\n          pageOpList.addOp(_util.OPS.endAnnotations, []);\n          pageOpList.flush(true);\n          return pageOpList;\n        });\n      });\n    },\n    extractTextContent: function extractTextContent(_ref7) {\n      var _this3 = this;\n\n      var handler = _ref7.handler,\n          task = _ref7.task,\n          normalizeWhitespace = _ref7.normalizeWhitespace,\n          sink = _ref7.sink,\n          combineTextItems = _ref7.combineTextItems;\n\n      var contentStreamPromise = this.pdfManager.ensure(this, 'getContentStream');\n      var resourcesPromise = this.loadResources(['ExtGState', 'XObject', 'Font']);\n      var dataPromises = Promise.all([contentStreamPromise, resourcesPromise]);\n      return dataPromises.then(function (_ref8) {\n        var _ref9 = _slicedToArray(_ref8, 1),\n            contentStream = _ref9[0];\n\n        var partialEvaluator = new _evaluator.PartialEvaluator({\n          pdfManager: _this3.pdfManager,\n          xref: _this3.xref,\n          handler: handler,\n          pageIndex: _this3.pageIndex,\n          idFactory: _this3.idFactory,\n          fontCache: _this3.fontCache,\n          builtInCMapCache: _this3.builtInCMapCache,\n          options: _this3.evaluatorOptions,\n          pdfFunctionFactory: _this3.pdfFunctionFactory\n        });\n        return partialEvaluator.getTextContent({\n          stream: contentStream,\n          task: task,\n          resources: _this3.resources,\n          normalizeWhitespace: normalizeWhitespace,\n          combineTextItems: combineTextItems,\n          sink: sink\n        });\n      });\n    },\n\n    getAnnotationsData: function Page_getAnnotationsData(intent) {\n      var annotations = this.annotations;\n      var annotationsData = [];\n      for (var i = 0, n = annotations.length; i < n; ++i) {\n        if (!intent || isAnnotationRenderable(annotations[i], intent)) {\n          annotationsData.push(annotations[i].data);\n        }\n      }\n      return annotationsData;\n    },\n    get annotations() {\n      var annotations = [];\n      var annotationRefs = this._getInheritableProperty('Annots') || [];\n      for (var i = 0, n = annotationRefs.length; i < n; ++i) {\n        var annotationRef = annotationRefs[i];\n        var annotation = _annotation.AnnotationFactory.create(this.xref, annotationRef, this.pdfManager, this.idFactory);\n        if (annotation) {\n          annotations.push(annotation);\n        }\n      }\n      return (0, _util.shadow)(this, 'annotations', annotations);\n    }\n  };\n  return Page;\n}();\nvar PDFDocument = function PDFDocumentClosure() {\n  var FINGERPRINT_FIRST_BYTES = 1024;\n  var EMPTY_FINGERPRINT = '\\x00\\x00\\x00\\x00\\x00\\x00\\x00' + '\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00';\n  function PDFDocument(pdfManager, arg) {\n    var stream;\n    if ((0, _primitives.isStream)(arg)) {\n      stream = arg;\n    } else if ((0, _util.isArrayBuffer)(arg)) {\n      stream = new _stream.Stream(arg);\n    } else {\n      throw new Error('PDFDocument: Unknown argument type');\n    }\n    if (stream.length <= 0) {\n      throw new Error('PDFDocument: stream must have data');\n    }\n    this.pdfManager = pdfManager;\n    this.stream = stream;\n    this.xref = new _obj.XRef(stream, pdfManager);\n    var evaluatorOptions = pdfManager.evaluatorOptions;\n    this.pdfFunctionFactory = new _function.PDFFunctionFactory({\n      xref: this.xref,\n      isEvalSupported: evaluatorOptions.isEvalSupported\n    });\n    this._pagePromises = [];\n  }\n  function find(stream, needle, limit, backwards) {\n    var pos = stream.pos;\n    var end = stream.end;\n    var strBuf = [];\n    if (pos + limit > end) {\n      limit = end - pos;\n    }\n    for (var n = 0; n < limit; ++n) {\n      strBuf.push(String.fromCharCode(stream.getByte()));\n    }\n    var str = strBuf.join('');\n    stream.pos = pos;\n    var index = backwards ? str.lastIndexOf(needle) : str.indexOf(needle);\n    if (index === -1) {\n      return false;\n    }\n    stream.pos += index;\n    return true;\n  }\n  var DocumentInfoValidators = {\n    Title: _util.isString,\n    Author: _util.isString,\n    Subject: _util.isString,\n    Keywords: _util.isString,\n    Creator: _util.isString,\n    Producer: _util.isString,\n    CreationDate: _util.isString,\n    ModDate: _util.isString,\n    Trapped: _primitives.isName\n  };\n  PDFDocument.prototype = {\n    parse: function PDFDocument_parse(recoveryMode) {\n      this.setup(recoveryMode);\n      var version = this.catalog.catDict.get('Version');\n      if ((0, _primitives.isName)(version)) {\n        this.pdfFormatVersion = version.name;\n      }\n      try {\n        this.acroForm = this.catalog.catDict.get('AcroForm');\n        if (this.acroForm) {\n          this.xfa = this.acroForm.get('XFA');\n          var fields = this.acroForm.get('Fields');\n          if ((!fields || !Array.isArray(fields) || fields.length === 0) && !this.xfa) {\n            this.acroForm = null;\n          }\n        }\n      } catch (ex) {\n        if (ex instanceof _util.MissingDataException) {\n          throw ex;\n        }\n        (0, _util.info)('Something wrong with AcroForm entry');\n        this.acroForm = null;\n      }\n    },\n    get linearization() {\n      var linearization = null;\n      try {\n        linearization = _parser.Linearization.create(this.stream);\n      } catch (err) {\n        if (err instanceof _util.MissingDataException) {\n          throw err;\n        }\n        (0, _util.info)(err);\n      }\n      return (0, _util.shadow)(this, 'linearization', linearization);\n    },\n    get startXRef() {\n      var stream = this.stream;\n      var startXRef = 0;\n      var linearization = this.linearization;\n      if (linearization) {\n        stream.reset();\n        if (find(stream, 'endobj', 1024)) {\n          startXRef = stream.pos + 6;\n        }\n      } else {\n        var step = 1024;\n        var found = false,\n            pos = stream.end;\n        while (!found && pos > 0) {\n          pos -= step - 'startxref'.length;\n          if (pos < 0) {\n            pos = 0;\n          }\n          stream.pos = pos;\n          found = find(stream, 'startxref', step, true);\n        }\n        if (found) {\n          stream.skip(9);\n          var ch;\n          do {\n            ch = stream.getByte();\n          } while ((0, _util.isSpace)(ch));\n          var 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 (0, _util.shadow)(this, 'startXRef', startXRef);\n    },\n    get mainXRefEntriesOffset() {\n      var mainXRefEntriesOffset = 0;\n      var linearization = this.linearization;\n      if (linearization) {\n        mainXRefEntriesOffset = linearization.mainXRefEntriesOffset;\n      }\n      return (0, _util.shadow)(this, 'mainXRefEntriesOffset', mainXRefEntriesOffset);\n    },\n    checkHeader: function PDFDocument_checkHeader() {\n      var stream = this.stream;\n      stream.reset();\n      if (find(stream, '%PDF-', 1024)) {\n        stream.moveStart();\n        var MAX_VERSION_LENGTH = 12;\n        var version = '',\n            ch;\n        while ((ch = stream.getByte()) > 0x20) {\n          if (version.length >= MAX_VERSION_LENGTH) {\n            break;\n          }\n          version += String.fromCharCode(ch);\n        }\n        if (!this.pdfFormatVersion) {\n          this.pdfFormatVersion = version.substring(5);\n        }\n        return;\n      }\n    },\n    parseStartXRef: function PDFDocument_parseStartXRef() {\n      var startXRef = this.startXRef;\n      this.xref.setStartXRef(startXRef);\n    },\n    setup: function PDFDocument_setup(recoveryMode) {\n      this.xref.parse(recoveryMode);\n      this.catalog = new _obj.Catalog(this.pdfManager, this.xref);\n    },\n    get numPages() {\n      var linearization = this.linearization;\n      var num = linearization ? linearization.numPages : this.catalog.numPages;\n      return (0, _util.shadow)(this, 'numPages', num);\n    },\n    get documentInfo() {\n      var docInfo = {\n        PDFFormatVersion: this.pdfFormatVersion,\n        IsLinearized: !!this.linearization,\n        IsAcroFormPresent: !!this.acroForm,\n        IsXFAPresent: !!this.xfa\n      };\n      var infoDict = void 0;\n      try {\n        infoDict = this.xref.trailer.get('Info');\n      } catch (err) {\n        if (err instanceof _util.MissingDataException) {\n          throw err;\n        }\n        (0, _util.info)('The document information dictionary is invalid.');\n      }\n      if ((0, _primitives.isDict)(infoDict)) {\n        for (var key in DocumentInfoValidators) {\n          if (infoDict.has(key)) {\n            var value = infoDict.get(key);\n            if (DocumentInfoValidators[key](value)) {\n              docInfo[key] = typeof value !== 'string' ? value : (0, _util.stringToPDFString)(value);\n            } else {\n              (0, _util.info)('Bad value in document info for \"' + key + '\"');\n            }\n          }\n        }\n      }\n      return (0, _util.shadow)(this, 'documentInfo', docInfo);\n    },\n    get fingerprint() {\n      var xref = this.xref,\n          hash,\n          fileID = '';\n      var idArray = xref.trailer.get('ID');\n      if (Array.isArray(idArray) && idArray[0] && (0, _util.isString)(idArray[0]) && idArray[0] !== EMPTY_FINGERPRINT) {\n        hash = (0, _util.stringToBytes)(idArray[0]);\n      } else {\n        if (this.stream.ensureRange) {\n          this.stream.ensureRange(0, Math.min(FINGERPRINT_FIRST_BYTES, this.stream.end));\n        }\n        hash = (0, _crypto.calculateMD5)(this.stream.bytes.subarray(0, FINGERPRINT_FIRST_BYTES), 0, FINGERPRINT_FIRST_BYTES);\n      }\n      for (var i = 0, n = hash.length; i < n; i++) {\n        var hex = hash[i].toString(16);\n        fileID += hex.length === 1 ? '0' + hex : hex;\n      }\n      return (0, _util.shadow)(this, 'fingerprint', fileID);\n    },\n    _getLinearizationPage: function _getLinearizationPage(pageIndex) {\n      var catalog = this.catalog,\n          linearization = this.linearization;\n\n      (0, _util.assert)(linearization && linearization.pageFirst === pageIndex);\n      var ref = new _primitives.Ref(linearization.objectNumberFirst, 0);\n      return this.xref.fetchAsync(ref).then(function (obj) {\n        if ((0, _primitives.isDict)(obj, 'Page') || (0, _primitives.isDict)(obj) && !obj.has('Type') && obj.has('Contents')) {\n          if (ref && !catalog.pageKidsCountCache.has(ref)) {\n            catalog.pageKidsCountCache.put(ref, 1);\n          }\n          return [obj, ref];\n        }\n        throw new _util.FormatError('The Linearization dictionary doesn\\'t point ' + 'to a valid Page dictionary.');\n      }).catch(function (reason) {\n        (0, _util.info)(reason);\n        return catalog.getPageDict(pageIndex);\n      });\n    },\n    getPage: function getPage(pageIndex) {\n      var _this4 = this;\n\n      if (this._pagePromises[pageIndex] !== undefined) {\n        return this._pagePromises[pageIndex];\n      }\n      var catalog = this.catalog,\n          linearization = this.linearization;\n\n      var promise = linearization && linearization.pageFirst === pageIndex ? this._getLinearizationPage(pageIndex) : catalog.getPageDict(pageIndex);\n      return this._pagePromises[pageIndex] = promise.then(function (_ref10) {\n        var _ref11 = _slicedToArray(_ref10, 2),\n            pageDict = _ref11[0],\n            ref = _ref11[1];\n\n        return new Page({\n          pdfManager: _this4.pdfManager,\n          xref: _this4.xref,\n          pageIndex: pageIndex,\n          pageDict: pageDict,\n          ref: ref,\n          fontCache: catalog.fontCache,\n          builtInCMapCache: catalog.builtInCMapCache,\n          pdfFunctionFactory: _this4.pdfFunctionFactory\n        });\n      });\n    },\n\n    cleanup: function PDFDocument_cleanup() {\n      return this.catalog.cleanup();\n    }\n  };\n  return PDFDocument;\n}();\nexports.Page = Page;\nexports.PDFDocument = PDFDocument;\n\n/***/ }),\n/* 122 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.FileSpec = exports.XRef = exports.ObjectLoader = exports.Catalog = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _primitives = __w_pdfjs_require__(123);\n\nvar _parser = __w_pdfjs_require__(124);\n\nvar _chunked_stream = __w_pdfjs_require__(120);\n\nvar _crypto = __w_pdfjs_require__(135);\n\nvar _colorspace = __w_pdfjs_require__(136);\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Catalog = function CatalogClosure() {\n  function Catalog(pdfManager, xref) {\n    this.pdfManager = pdfManager;\n    this.xref = xref;\n    this.catDict = xref.getCatalogObj();\n    if (!(0, _primitives.isDict)(this.catDict)) {\n      throw new _util.FormatError('catalog object is not a dictionary');\n    }\n    this.fontCache = new _primitives.RefSetCache();\n    this.builtInCMapCache = new Map();\n    this.pageKidsCountCache = new _primitives.RefSetCache();\n  }\n  Catalog.prototype = {\n    get metadata() {\n      var streamRef = this.catDict.getRaw('Metadata');\n      if (!(0, _primitives.isRef)(streamRef)) {\n        return (0, _util.shadow)(this, 'metadata', null);\n      }\n      var encryptMetadata = !this.xref.encrypt ? false : this.xref.encrypt.encryptMetadata;\n      var stream = this.xref.fetch(streamRef, !encryptMetadata);\n      var metadata;\n      if (stream && (0, _primitives.isDict)(stream.dict)) {\n        var type = stream.dict.get('Type');\n        var subtype = stream.dict.get('Subtype');\n        if ((0, _primitives.isName)(type, 'Metadata') && (0, _primitives.isName)(subtype, 'XML')) {\n          try {\n            metadata = (0, _util.stringToUTF8String)((0, _util.bytesToString)(stream.getBytes()));\n          } catch (e) {\n            if (e instanceof _util.MissingDataException) {\n              throw e;\n            }\n            (0, _util.info)('Skipping invalid metadata.');\n          }\n        }\n      }\n      return (0, _util.shadow)(this, 'metadata', metadata);\n    },\n    get toplevelPagesDict() {\n      var pagesObj = this.catDict.get('Pages');\n      if (!(0, _primitives.isDict)(pagesObj)) {\n        throw new _util.FormatError('invalid top-level pages dictionary');\n      }\n      return (0, _util.shadow)(this, 'toplevelPagesDict', pagesObj);\n    },\n    get documentOutline() {\n      var obj = null;\n      try {\n        obj = this.readDocumentOutline();\n      } catch (ex) {\n        if (ex instanceof _util.MissingDataException) {\n          throw ex;\n        }\n        (0, _util.warn)('Unable to read document outline');\n      }\n      return (0, _util.shadow)(this, 'documentOutline', obj);\n    },\n    readDocumentOutline: function Catalog_readDocumentOutline() {\n      var obj = this.catDict.get('Outlines');\n      if (!(0, _primitives.isDict)(obj)) {\n        return null;\n      }\n      obj = obj.getRaw('First');\n      if (!(0, _primitives.isRef)(obj)) {\n        return null;\n      }\n      var root = { items: [] };\n      var queue = [{\n        obj: obj,\n        parent: root\n      }];\n      var processed = new _primitives.RefSet();\n      processed.put(obj);\n      var xref = this.xref,\n          blackColor = new Uint8ClampedArray(3);\n      while (queue.length > 0) {\n        var i = queue.shift();\n        var outlineDict = xref.fetchIfRef(i.obj);\n        if (outlineDict === null) {\n          continue;\n        }\n        if (!outlineDict.has('Title')) {\n          throw new _util.FormatError('Invalid outline item');\n        }\n        var data = {\n          url: null,\n          dest: null\n        };\n        Catalog.parseDestDictionary({\n          destDict: outlineDict,\n          resultObj: data,\n          docBaseUrl: this.pdfManager.docBaseUrl\n        });\n        var title = outlineDict.get('Title');\n        var flags = outlineDict.get('F') || 0;\n        var color = outlineDict.getArray('C'),\n            rgbColor = blackColor;\n        if (Array.isArray(color) && color.length === 3 && (color[0] !== 0 || color[1] !== 0 || color[2] !== 0)) {\n          rgbColor = _colorspace.ColorSpace.singletons.rgb.getRgb(color, 0);\n        }\n        var outlineItem = {\n          dest: data.dest,\n          url: data.url,\n          unsafeUrl: data.unsafeUrl,\n          newWindow: data.newWindow,\n          title: (0, _util.stringToPDFString)(title),\n          color: rgbColor,\n          count: outlineDict.get('Count'),\n          bold: !!(flags & 2),\n          italic: !!(flags & 1),\n          items: []\n        };\n        i.parent.items.push(outlineItem);\n        obj = outlineDict.getRaw('First');\n        if ((0, _primitives.isRef)(obj) && !processed.has(obj)) {\n          queue.push({\n            obj: obj,\n            parent: outlineItem\n          });\n          processed.put(obj);\n        }\n        obj = outlineDict.getRaw('Next');\n        if ((0, _primitives.isRef)(obj) && !processed.has(obj)) {\n          queue.push({\n            obj: obj,\n            parent: i.parent\n          });\n          processed.put(obj);\n        }\n      }\n      return root.items.length > 0 ? root.items : null;\n    },\n    get numPages() {\n      var obj = this.toplevelPagesDict.get('Count');\n      if (!Number.isInteger(obj)) {\n        throw new _util.FormatError('page count in top level pages object is not an integer');\n      }\n      return (0, _util.shadow)(this, 'numPages', obj);\n    },\n    get destinations() {\n      function fetchDestination(dest) {\n        return (0, _primitives.isDict)(dest) ? dest.get('D') : dest;\n      }\n      var xref = this.xref;\n      var dests = {},\n          nameTreeRef,\n          nameDictionaryRef;\n      var obj = this.catDict.get('Names');\n      if (obj && obj.has('Dests')) {\n        nameTreeRef = obj.getRaw('Dests');\n      } else if (this.catDict.has('Dests')) {\n        nameDictionaryRef = this.catDict.get('Dests');\n      }\n      if (nameDictionaryRef) {\n        obj = nameDictionaryRef;\n        obj.forEach(function catalogForEach(key, value) {\n          if (!value) {\n            return;\n          }\n          dests[key] = fetchDestination(value);\n        });\n      }\n      if (nameTreeRef) {\n        var nameTree = new NameTree(nameTreeRef, xref);\n        var names = nameTree.getAll();\n        for (var name in names) {\n          dests[name] = fetchDestination(names[name]);\n        }\n      }\n      return (0, _util.shadow)(this, 'destinations', dests);\n    },\n    getDestination: function Catalog_getDestination(destinationId) {\n      function fetchDestination(dest) {\n        return (0, _primitives.isDict)(dest) ? dest.get('D') : dest;\n      }\n      var xref = this.xref;\n      var dest = null,\n          nameTreeRef,\n          nameDictionaryRef;\n      var obj = this.catDict.get('Names');\n      if (obj && obj.has('Dests')) {\n        nameTreeRef = obj.getRaw('Dests');\n      } else if (this.catDict.has('Dests')) {\n        nameDictionaryRef = this.catDict.get('Dests');\n      }\n      if (nameDictionaryRef) {\n        var value = nameDictionaryRef.get(destinationId);\n        if (value) {\n          dest = fetchDestination(value);\n        }\n      }\n      if (nameTreeRef) {\n        var nameTree = new NameTree(nameTreeRef, xref);\n        dest = fetchDestination(nameTree.get(destinationId));\n      }\n      return dest;\n    },\n    get pageLabels() {\n      var obj = null;\n      try {\n        obj = this.readPageLabels();\n      } catch (ex) {\n        if (ex instanceof _util.MissingDataException) {\n          throw ex;\n        }\n        (0, _util.warn)('Unable to read page labels.');\n      }\n      return (0, _util.shadow)(this, 'pageLabels', obj);\n    },\n    readPageLabels: function Catalog_readPageLabels() {\n      var obj = this.catDict.getRaw('PageLabels');\n      if (!obj) {\n        return null;\n      }\n      var pageLabels = new Array(this.numPages);\n      var style = null;\n      var prefix = '';\n      var numberTree = new NumberTree(obj, this.xref);\n      var nums = numberTree.getAll();\n      var currentLabel = '',\n          currentIndex = 1;\n      for (var i = 0, ii = this.numPages; i < ii; i++) {\n        if (i in nums) {\n          var labelDict = nums[i];\n          if (!(0, _primitives.isDict)(labelDict)) {\n            throw new _util.FormatError('The PageLabel is not a dictionary.');\n          }\n          if (labelDict.has('Type') && !(0, _primitives.isName)(labelDict.get('Type'), 'PageLabel')) {\n            throw new _util.FormatError('Invalid type in PageLabel dictionary.');\n          }\n          if (labelDict.has('S')) {\n            var s = labelDict.get('S');\n            if (!(0, _primitives.isName)(s)) {\n              throw new _util.FormatError('Invalid style in PageLabel dictionary.');\n            }\n            style = s.name;\n          } else {\n            style = null;\n          }\n          if (labelDict.has('P')) {\n            var p = labelDict.get('P');\n            if (!(0, _util.isString)(p)) {\n              throw new _util.FormatError('Invalid prefix in PageLabel dictionary.');\n            }\n            prefix = (0, _util.stringToPDFString)(p);\n          } else {\n            prefix = '';\n          }\n          if (labelDict.has('St')) {\n            var st = labelDict.get('St');\n            if (!(Number.isInteger(st) && st >= 1)) {\n              throw new _util.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 = (0, _util.toRomanNumerals)(currentIndex, style === 'r');\n            break;\n          case 'A':\n          case 'a':\n            var LIMIT = 26;\n            var A_UPPER_CASE = 0x41,\n                A_LOWER_CASE = 0x61;\n            var baseCharCode = style === 'a' ? A_LOWER_CASE : A_UPPER_CASE;\n            var letterIndex = currentIndex - 1;\n            var character = String.fromCharCode(baseCharCode + letterIndex % LIMIT);\n            var charBuf = [];\n            for (var j = 0, jj = letterIndex / LIMIT | 0; j <= jj; j++) {\n              charBuf.push(character);\n            }\n            currentLabel = charBuf.join('');\n            break;\n          default:\n            if (style) {\n              throw new _util.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 pageMode() {\n      var obj = this.catDict.get('PageMode');\n      var pageMode = 'UseNone';\n      if ((0, _primitives.isName)(obj)) {\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 (0, _util.shadow)(this, 'pageMode', pageMode);\n    },\n    get attachments() {\n      var xref = this.xref;\n      var attachments = null,\n          nameTreeRef;\n      var obj = this.catDict.get('Names');\n      if (obj) {\n        nameTreeRef = obj.getRaw('EmbeddedFiles');\n      }\n      if (nameTreeRef) {\n        var nameTree = new NameTree(nameTreeRef, xref);\n        var names = nameTree.getAll();\n        for (var name in names) {\n          var fs = new FileSpec(names[name], xref);\n          if (!attachments) {\n            attachments = Object.create(null);\n          }\n          attachments[(0, _util.stringToPDFString)(name)] = fs.serializable;\n        }\n      }\n      return (0, _util.shadow)(this, 'attachments', attachments);\n    },\n    get javaScript() {\n      var xref = this.xref;\n      var obj = this.catDict.get('Names');\n      var javaScript = null;\n      function appendIfJavaScriptDict(jsDict) {\n        var type = jsDict.get('S');\n        if (!(0, _primitives.isName)(type, 'JavaScript')) {\n          return;\n        }\n        var js = jsDict.get('JS');\n        if ((0, _primitives.isStream)(js)) {\n          js = (0, _util.bytesToString)(js.getBytes());\n        } else if (!(0, _util.isString)(js)) {\n          return;\n        }\n        if (!javaScript) {\n          javaScript = [];\n        }\n        javaScript.push((0, _util.stringToPDFString)(js));\n      }\n      if (obj && obj.has('JavaScript')) {\n        var nameTree = new NameTree(obj.getRaw('JavaScript'), xref);\n        var names = nameTree.getAll();\n        for (var name in names) {\n          var jsDict = names[name];\n          if ((0, _primitives.isDict)(jsDict)) {\n            appendIfJavaScriptDict(jsDict);\n          }\n        }\n      }\n      var openactionDict = this.catDict.get('OpenAction');\n      if ((0, _primitives.isDict)(openactionDict, 'Action')) {\n        var actionType = openactionDict.get('S');\n        if ((0, _primitives.isName)(actionType, 'Named')) {\n          var action = openactionDict.get('N');\n          if ((0, _primitives.isName)(action, 'Print')) {\n            if (!javaScript) {\n              javaScript = [];\n            }\n            javaScript.push('print({});');\n          }\n        } else {\n          appendIfJavaScriptDict(openactionDict);\n        }\n      }\n      return (0, _util.shadow)(this, 'javaScript', javaScript);\n    },\n    cleanup: function Catalog_cleanup() {\n      var _this = this;\n\n      this.pageKidsCountCache.clear();\n      var promises = [];\n      this.fontCache.forEach(function (promise) {\n        promises.push(promise);\n      });\n      return Promise.all(promises).then(function (translatedFonts) {\n        for (var i = 0, ii = translatedFonts.length; i < ii; i++) {\n          var font = translatedFonts[i].dict;\n          delete font.translated;\n        }\n        _this.fontCache.clear();\n        _this.builtInCMapCache.clear();\n      });\n    },\n    getPageDict: function Catalog_getPageDict(pageIndex) {\n      var capability = (0, _util.createPromiseCapability)();\n      var nodesToVisit = [this.catDict.getRaw('Pages')];\n      var count,\n          currentPageIndex = 0;\n      var xref = this.xref,\n          pageKidsCountCache = this.pageKidsCountCache;\n      function next() {\n        while (nodesToVisit.length) {\n          var currentNode = nodesToVisit.pop();\n          if ((0, _primitives.isRef)(currentNode)) {\n            count = pageKidsCountCache.get(currentNode);\n            if (count > 0 && currentPageIndex + count < pageIndex) {\n              currentPageIndex += count;\n              continue;\n            }\n            xref.fetchAsync(currentNode).then(function (obj) {\n              if ((0, _primitives.isDict)(obj, 'Page') || (0, _primitives.isDict)(obj) && !obj.has('Kids')) {\n                if (pageIndex === currentPageIndex) {\n                  if (currentNode && !pageKidsCountCache.has(currentNode)) {\n                    pageKidsCountCache.put(currentNode, 1);\n                  }\n                  capability.resolve([obj, currentNode]);\n                } else {\n                  currentPageIndex++;\n                  next();\n                }\n                return;\n              }\n              nodesToVisit.push(obj);\n              next();\n            }, capability.reject);\n            return;\n          }\n          if (!(0, _primitives.isDict)(currentNode)) {\n            capability.reject(new _util.FormatError('page dictionary kid reference points to wrong type of object'));\n            return;\n          }\n          count = currentNode.get('Count');\n          if (Number.isInteger(count) && count >= 0) {\n            var objId = currentNode.objId;\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          var kids = currentNode.get('Kids');\n          if (!Array.isArray(kids)) {\n            if ((0, _primitives.isName)(currentNode.get('Type'), 'Page') || !currentNode.has('Type') && currentNode.has('Contents')) {\n              if (currentPageIndex === pageIndex) {\n                capability.resolve([currentNode, null]);\n                return;\n              }\n              currentPageIndex++;\n              continue;\n            }\n            capability.reject(new _util.FormatError('page dictionary kids object is not an array'));\n            return;\n          }\n          for (var last = kids.length - 1; last >= 0; last--) {\n            nodesToVisit.push(kids[last]);\n          }\n        }\n        capability.reject(new Error('Page index ' + pageIndex + ' not found.'));\n      }\n      next();\n      return capability.promise;\n    },\n    getPageIndex: function Catalog_getPageIndex(pageRef) {\n      var xref = this.xref;\n      function pagesBeforeRef(kidRef) {\n        var total = 0;\n        var parentRef;\n        return xref.fetchAsync(kidRef).then(function (node) {\n          if ((0, _primitives.isRefsEqual)(kidRef, pageRef) && !(0, _primitives.isDict)(node, 'Page') && !((0, _primitives.isDict)(node) && !node.has('Type') && node.has('Contents'))) {\n            throw new _util.FormatError('The reference does not point to a /Page Dict.');\n          }\n          if (!node) {\n            return null;\n          }\n          if (!(0, _primitives.isDict)(node)) {\n            throw new _util.FormatError('node must be a Dict.');\n          }\n          parentRef = node.getRaw('Parent');\n          return node.getAsync('Parent');\n        }).then(function (parent) {\n          if (!parent) {\n            return null;\n          }\n          if (!(0, _primitives.isDict)(parent)) {\n            throw new _util.FormatError('parent must be a Dict.');\n          }\n          return parent.getAsync('Kids');\n        }).then(function (kids) {\n          if (!kids) {\n            return null;\n          }\n          var kidPromises = [];\n          var found = false;\n          for (var i = 0; i < kids.length; i++) {\n            var kid = kids[i];\n            if (!(0, _primitives.isRef)(kid)) {\n              throw new _util.FormatError('kid must be a Ref.');\n            }\n            if ((0, _primitives.isRefsEqual)(kid, kidRef)) {\n              found = true;\n              break;\n            }\n            kidPromises.push(xref.fetchAsync(kid).then(function (kid) {\n              if (!(0, _primitives.isDict)(kid)) {\n                throw new _util.FormatError('kid node must be a Dict.');\n              }\n              if (kid.has('Count')) {\n                var count = kid.get('Count');\n                total += count;\n              } else {\n                total++;\n              }\n            }));\n          }\n          if (!found) {\n            throw new _util.FormatError('kid ref not found in parents kids');\n          }\n          return Promise.all(kidPromises).then(function () {\n            return [total, parentRef];\n          });\n        });\n      }\n      var total = 0;\n      function next(ref) {\n        return pagesBeforeRef(ref).then(function (args) {\n          if (!args) {\n            return total;\n          }\n          var count = args[0];\n          var parentRef = args[1];\n          total += count;\n          return next(parentRef);\n        });\n      }\n      return next(pageRef);\n    }\n  };\n  Catalog.parseDestDictionary = function Catalog_parseDestDictionary(params) {\n    function addDefaultProtocolToUrl(url) {\n      if (url.indexOf('www.') === 0) {\n        return 'http://' + url;\n      }\n      return url;\n    }\n    function tryConvertUrlEncoding(url) {\n      try {\n        return (0, _util.stringToUTF8String)(url);\n      } catch (e) {\n        return url;\n      }\n    }\n    var destDict = params.destDict;\n    if (!(0, _primitives.isDict)(destDict)) {\n      (0, _util.warn)('parseDestDictionary: \"destDict\" must be a dictionary.');\n      return;\n    }\n    var resultObj = params.resultObj;\n    if ((typeof resultObj === 'undefined' ? 'undefined' : _typeof(resultObj)) !== 'object') {\n      (0, _util.warn)('parseDestDictionary: \"resultObj\" must be an object.');\n      return;\n    }\n    var docBaseUrl = params.docBaseUrl || null;\n    var action = destDict.get('A'),\n        url,\n        dest;\n    if (!(0, _primitives.isDict)(action) && destDict.has('Dest')) {\n      action = destDict.get('Dest');\n    }\n    if ((0, _primitives.isDict)(action)) {\n      var actionType = action.get('S');\n      if (!(0, _primitives.isName)(actionType)) {\n        (0, _util.warn)('parseDestDictionary: Invalid type in Action dictionary.');\n        return;\n      }\n      var actionName = actionType.name;\n      switch (actionName) {\n        case 'URI':\n          url = action.get('URI');\n          if ((0, _primitives.isName)(url)) {\n            url = '/' + url.name;\n          } else if ((0, _util.isString)(url)) {\n            url = addDefaultProtocolToUrl(url);\n          }\n          break;\n        case 'GoTo':\n          dest = action.get('D');\n          break;\n        case 'Launch':\n        case 'GoToR':\n          var urlDict = action.get('F');\n          if ((0, _primitives.isDict)(urlDict)) {\n            url = urlDict.get('F') || null;\n          } else if ((0, _util.isString)(urlDict)) {\n            url = urlDict;\n          }\n          var remoteDest = action.get('D');\n          if (remoteDest) {\n            if ((0, _primitives.isName)(remoteDest)) {\n              remoteDest = remoteDest.name;\n            }\n            if ((0, _util.isString)(url)) {\n              var baseUrl = url.split('#')[0];\n              if ((0, _util.isString)(remoteDest)) {\n                url = baseUrl + '#' + remoteDest;\n              } else if (Array.isArray(remoteDest)) {\n                url = baseUrl + '#' + JSON.stringify(remoteDest);\n              }\n            }\n          }\n          var newWindow = action.get('NewWindow');\n          if ((0, _util.isBool)(newWindow)) {\n            resultObj.newWindow = newWindow;\n          }\n          break;\n        case 'Named':\n          var namedAction = action.get('N');\n          if ((0, _primitives.isName)(namedAction)) {\n            resultObj.action = namedAction.name;\n          }\n          break;\n        case 'JavaScript':\n          var jsAction = action.get('JS'),\n              js;\n          if ((0, _primitives.isStream)(jsAction)) {\n            js = (0, _util.bytesToString)(jsAction.getBytes());\n          } else if ((0, _util.isString)(jsAction)) {\n            js = jsAction;\n          }\n          if (js) {\n            var URL_OPEN_METHODS = ['app.launchURL', 'window.open'];\n            var regex = new RegExp('^\\\\s*(' + URL_OPEN_METHODS.join('|').split('.').join('\\\\.') + ')\\\\((?:\\'|\\\")([^\\'\\\"]*)(?:\\'|\\\")(?:,\\\\s*(\\\\w+)\\\\)|\\\\))', 'i');\n            var jsUrl = regex.exec((0, _util.stringToPDFString)(js));\n            if (jsUrl && jsUrl[2]) {\n              url = jsUrl[2];\n              if (jsUrl[3] === 'true' && jsUrl[1] === 'app.launchURL') {\n                resultObj.newWindow = true;\n              }\n              break;\n            }\n          }\n        default:\n          (0, _util.warn)('parseDestDictionary: Unsupported Action type \"' + actionName + '\".');\n          break;\n      }\n    } else if (destDict.has('Dest')) {\n      dest = destDict.get('Dest');\n    }\n    if ((0, _util.isString)(url)) {\n      url = tryConvertUrlEncoding(url);\n      var absoluteUrl = (0, _util.createValidAbsoluteUrl)(url, docBaseUrl);\n      if (absoluteUrl) {\n        resultObj.url = absoluteUrl.href;\n      }\n      resultObj.unsafeUrl = url;\n    }\n    if (dest) {\n      if ((0, _primitives.isName)(dest)) {\n        dest = dest.name;\n      }\n      if ((0, _util.isString)(dest) || Array.isArray(dest)) {\n        resultObj.dest = dest;\n      }\n    }\n  };\n  return Catalog;\n}();\nvar XRef = function XRefClosure() {\n  function XRef(stream, pdfManager) {\n    this.stream = stream;\n    this.pdfManager = pdfManager;\n    this.entries = [];\n    this.xrefstms = Object.create(null);\n    this.cache = [];\n    this.stats = {\n      streamTypes: [],\n      fontTypes: []\n    };\n  }\n  XRef.prototype = {\n    setStartXRef: function XRef_setStartXRef(startXRef) {\n      this.startXRefQueue = [startXRef];\n    },\n    parse: function XRef_parse(recoveryMode) {\n      var trailerDict;\n      if (!recoveryMode) {\n        trailerDict = this.readXRef();\n      } else {\n        (0, _util.warn)('Indexing all PDF objects');\n        trailerDict = this.indexObjects();\n      }\n      trailerDict.assignXref(this);\n      this.trailer = trailerDict;\n      var encrypt = void 0;\n      try {\n        encrypt = trailerDict.get('Encrypt');\n      } catch (ex) {\n        if (ex instanceof _util.MissingDataException) {\n          throw ex;\n        }\n        (0, _util.warn)('XRef.parse - Invalid \"Encrypt\" reference: \"' + ex + '\".');\n      }\n      if ((0, _primitives.isDict)(encrypt)) {\n        var ids = trailerDict.get('ID');\n        var fileId = ids && ids.length ? ids[0] : '';\n        encrypt.suppressEncryption = true;\n        this.encrypt = new _crypto.CipherTransformFactory(encrypt, fileId, this.pdfManager.password);\n      }\n      var root = void 0;\n      try {\n        root = trailerDict.get('Root');\n      } catch (ex) {\n        if (ex instanceof _util.MissingDataException) {\n          throw ex;\n        }\n        (0, _util.warn)('XRef.parse - Invalid \"Root\" reference: \"' + ex + '\".');\n      }\n      if ((0, _primitives.isDict)(root) && root.has('Pages')) {\n        this.root = root;\n      } else {\n        if (!recoveryMode) {\n          throw new _util.XRefParseException();\n        }\n        throw new _util.FormatError('Invalid root reference');\n      }\n    },\n    processXRefTable: function XRef_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      var obj = this.readXRefTable(parser);\n      if (!(0, _primitives.isCmd)(obj, 'trailer')) {\n        throw new _util.FormatError('Invalid XRef table: could not find trailer dictionary');\n      }\n      var dict = parser.getObj();\n      if (!(0, _primitives.isDict)(dict) && dict.dict) {\n        dict = dict.dict;\n      }\n      if (!(0, _primitives.isDict)(dict)) {\n        throw new _util.FormatError('Invalid XRef table: could not parse trailer dictionary');\n      }\n      delete this.tableState;\n      return dict;\n    },\n    readXRefTable: function XRef_readXRefTable(parser) {\n      var stream = parser.lexer.stream;\n      var tableState = this.tableState;\n      stream.pos = tableState.streamPos;\n      parser.buf1 = tableState.parserBuf1;\n      parser.buf2 = tableState.parserBuf2;\n      var obj;\n      while (true) {\n        if (!('firstEntryNum' in tableState) || !('entryCount' in tableState)) {\n          if ((0, _primitives.isCmd)(obj = parser.getObj(), 'trailer')) {\n            break;\n          }\n          tableState.firstEntryNum = obj;\n          tableState.entryCount = parser.getObj();\n        }\n        var first = tableState.firstEntryNum;\n        var count = tableState.entryCount;\n        if (!Number.isInteger(first) || !Number.isInteger(count)) {\n          throw new _util.FormatError('Invalid XRef table: wrong types in subsection header');\n        }\n        for (var 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          var entry = {};\n          entry.offset = parser.getObj();\n          entry.gen = parser.getObj();\n          var type = parser.getObj();\n          if ((0, _primitives.isCmd)(type, 'f')) {\n            entry.free = true;\n          } else if ((0, _primitives.isCmd)(type, 'n')) {\n            entry.uncompressed = true;\n          }\n          if (!Number.isInteger(entry.offset) || !Number.isInteger(entry.gen) || !(entry.free || entry.uncompressed)) {\n            throw new _util.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 _util.FormatError('Invalid XRef table: unexpected first object');\n      }\n      return obj;\n    },\n    processXRefStream: function XRef_processXRefStream(stream) {\n      if (!('streamState' in this)) {\n        var streamParameters = stream.dict;\n        var byteWidths = streamParameters.get('W');\n        var range = streamParameters.get('Index');\n        if (!range) {\n          range = [0, streamParameters.get('Size')];\n        }\n        this.streamState = {\n          entryRanges: range,\n          byteWidths: 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: function XRef_readXRefStream(stream) {\n      var i, j;\n      var streamState = this.streamState;\n      stream.pos = streamState.streamPos;\n      var byteWidths = streamState.byteWidths;\n      var typeFieldWidth = byteWidths[0];\n      var offsetFieldWidth = byteWidths[1];\n      var generationFieldWidth = byteWidths[2];\n      var entryRanges = streamState.entryRanges;\n      while (entryRanges.length > 0) {\n        var first = entryRanges[0];\n        var n = entryRanges[1];\n        if (!Number.isInteger(first) || !Number.isInteger(n)) {\n          throw new _util.FormatError('Invalid XRef range fields: ' + first + ', ' + n);\n        }\n        if (!Number.isInteger(typeFieldWidth) || !Number.isInteger(offsetFieldWidth) || !Number.isInteger(generationFieldWidth)) {\n          throw new _util.FormatError('Invalid XRef entry fields length: ' + first + ', ' + n);\n        }\n        for (i = streamState.entryNum; i < n; ++i) {\n          streamState.entryNum = i;\n          streamState.streamPos = stream.pos;\n          var type = 0,\n              offset = 0,\n              generation = 0;\n          for (j = 0; j < typeFieldWidth; ++j) {\n            type = type << 8 | stream.getByte();\n          }\n          if (typeFieldWidth === 0) {\n            type = 1;\n          }\n          for (j = 0; j < offsetFieldWidth; ++j) {\n            offset = offset << 8 | stream.getByte();\n          }\n          for (j = 0; j < generationFieldWidth; ++j) {\n            generation = generation << 8 | stream.getByte();\n          }\n          var 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 _util.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: function XRef_indexObjects() {\n      var TAB = 0x9,\n          LF = 0xA,\n          CR = 0xD,\n          SPACE = 0x20;\n      var PERCENT = 0x25,\n          LT = 0x3C;\n      function readToken(data, offset) {\n        var 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        var length = what.length,\n            dataLength = data.length;\n        var skipped = 0;\n        while (offset < dataLength) {\n          var 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      var objRegExp = /^(\\d+)\\s+(\\d+)\\s+obj\\b/;\n      var endobjRegExp = /\\bendobj[\\b\\s]$/;\n      var nestedObjRegExp = /\\s+(\\d+\\s+\\d+\\s+obj[\\b\\s])$/;\n      var CHECK_CONTENT_LENGTH = 25;\n      var trailerBytes = new Uint8Array([116, 114, 97, 105, 108, 101, 114]);\n      var startxrefBytes = new Uint8Array([115, 116, 97, 114, 116, 120, 114, 101, 102]);\n      var objBytes = new Uint8Array([111, 98, 106]);\n      var xrefBytes = new Uint8Array([47, 88, 82, 101, 102]);\n      this.entries.length = 0;\n      var stream = this.stream;\n      stream.pos = 0;\n      var buffer = stream.getBytes();\n      var position = stream.start,\n          length = buffer.length;\n      var trailers = [],\n          xrefStms = [];\n      while (position < length) {\n        var 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        var token = readToken(buffer, position);\n        var m;\n        if (token.indexOf('xref') === 0 && (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          if (typeof this.entries[m[1]] === 'undefined') {\n            this.entries[m[1]] = {\n              offset: position - stream.start,\n              gen: m[2] | 0,\n              uncompressed: true\n            };\n          }\n          var contentLength = void 0,\n              startPos = position + token.length;\n          while (startPos < buffer.length) {\n            var endPos = startPos + skipUntil(buffer, startPos, objBytes) + 4;\n            contentLength = endPos - position;\n            var checkPos = Math.max(endPos - CHECK_CONTENT_LENGTH, startPos);\n            var tokenStr = (0, _util.bytesToString)(buffer.subarray(checkPos, endPos));\n            if (endobjRegExp.test(tokenStr)) {\n              break;\n            } else {\n              var objToken = nestedObjRegExp.exec(tokenStr);\n              if (objToken && objToken[1]) {\n                (0, _util.warn)('indexObjects: Found new \"obj\" inside of another \"obj\", ' + 'caused by missing \"endobj\" -- trying to recover.');\n                contentLength -= objToken[1].length;\n                break;\n              }\n            }\n            startPos = endPos;\n          }\n          var content = buffer.subarray(position, position + contentLength);\n          var xrefTagOffset = skipUntil(content, 0, xrefBytes);\n          if (xrefTagOffset < contentLength && content[xrefTagOffset + 5] < 64) {\n            xrefStms.push(position - stream.start);\n            this.xrefstms[position - stream.start] = 1;\n          }\n          position += contentLength;\n        } else if (token.indexOf('trailer') === 0 && (token.length === 7 || /\\s/.test(token[7]))) {\n          trailers.push(position);\n          position += skipUntil(buffer, position, startxrefBytes);\n        } else {\n          position += token.length + 1;\n        }\n      }\n      var i, ii;\n      for (i = 0, ii = xrefStms.length; i < ii; ++i) {\n        this.startXRefQueue.push(xrefStms[i]);\n        this.readXRef(true);\n      }\n      var trailerDict = void 0;\n      for (i = 0, ii = trailers.length; i < ii; ++i) {\n        stream.pos = trailers[i];\n        var parser = new _parser.Parser(new _parser.Lexer(stream), true, this, true);\n        var obj = parser.getObj();\n        if (!(0, _primitives.isCmd)(obj, 'trailer')) {\n          continue;\n        }\n        var dict = parser.getObj();\n        if (!(0, _primitives.isDict)(dict)) {\n          continue;\n        }\n        var rootDict = void 0;\n        try {\n          rootDict = dict.get('Root');\n        } catch (ex) {\n          if (ex instanceof _util.MissingDataException) {\n            throw ex;\n          }\n          continue;\n        }\n        if (!(0, _primitives.isDict)(rootDict) || !rootDict.has('Pages')) {\n          continue;\n        }\n        if (dict.has('ID')) {\n          return dict;\n        }\n        trailerDict = dict;\n      }\n      if (trailerDict) {\n        return trailerDict;\n      }\n      throw new _util.InvalidPDFException('Invalid PDF structure');\n    },\n    readXRef: function XRef_readXRef(recoveryMode) {\n      var stream = this.stream;\n      var startXRefParsedCache = Object.create(null);\n      try {\n        while (this.startXRefQueue.length) {\n          var startXRef = this.startXRefQueue[0];\n          if (startXRefParsedCache[startXRef]) {\n            (0, _util.warn)('readXRef - skipping XRef table since it was already parsed.');\n            this.startXRefQueue.shift();\n            continue;\n          }\n          startXRefParsedCache[startXRef] = true;\n          stream.pos = startXRef + stream.start;\n          var parser = new _parser.Parser(new _parser.Lexer(stream), true, this);\n          var obj = parser.getObj();\n          var dict;\n          if ((0, _primitives.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)) {\n              var pos = obj;\n              if (!(pos in this.xrefstms)) {\n                this.xrefstms[pos] = 1;\n                this.startXRefQueue.push(pos);\n              }\n            }\n          } else if (Number.isInteger(obj)) {\n            if (!Number.isInteger(parser.getObj()) || !(0, _primitives.isCmd)(parser.getObj(), 'obj') || !(0, _primitives.isStream)(obj = parser.getObj())) {\n              throw new _util.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 _util.FormatError('Failed to read XRef stream');\n            }\n          } else {\n            throw new _util.FormatError('Invalid XRef stream header');\n          }\n          obj = dict.get('Prev');\n          if (Number.isInteger(obj)) {\n            this.startXRefQueue.push(obj);\n          } else if ((0, _primitives.isRef)(obj)) {\n            this.startXRefQueue.push(obj.num);\n          }\n          this.startXRefQueue.shift();\n        }\n        return this.topDict;\n      } catch (e) {\n        if (e instanceof _util.MissingDataException) {\n          throw e;\n        }\n        (0, _util.info)('(while reading XRef): ' + e);\n      }\n      if (recoveryMode) {\n        return;\n      }\n      throw new _util.XRefParseException();\n    },\n    getEntry: function XRef_getEntry(i) {\n      var xrefEntry = this.entries[i];\n      if (xrefEntry && !xrefEntry.free && xrefEntry.offset) {\n        return xrefEntry;\n      }\n      return null;\n    },\n    fetchIfRef: function XRef_fetchIfRef(obj, suppressEncryption) {\n      if (!(0, _primitives.isRef)(obj)) {\n        return obj;\n      }\n      return this.fetch(obj, suppressEncryption);\n    },\n    fetch: function XRef_fetch(ref, suppressEncryption) {\n      if (!(0, _primitives.isRef)(ref)) {\n        throw new Error('ref object is not a reference');\n      }\n      var num = ref.num;\n      if (num in this.cache) {\n        var cacheEntry = this.cache[num];\n        if (cacheEntry instanceof _primitives.Dict && !cacheEntry.objId) {\n          cacheEntry.objId = ref.toString();\n        }\n        return cacheEntry;\n      }\n      var xrefEntry = this.getEntry(num);\n      if (xrefEntry === null) {\n        return this.cache[num] = null;\n      }\n      if (xrefEntry.uncompressed) {\n        xrefEntry = this.fetchUncompressed(ref, xrefEntry, suppressEncryption);\n      } else {\n        xrefEntry = this.fetchCompressed(xrefEntry, suppressEncryption);\n      }\n      if ((0, _primitives.isDict)(xrefEntry)) {\n        xrefEntry.objId = ref.toString();\n      } else if ((0, _primitives.isStream)(xrefEntry)) {\n        xrefEntry.dict.objId = ref.toString();\n      }\n      return xrefEntry;\n    },\n    fetchUncompressed: function XRef_fetchUncompressed(ref, xrefEntry, suppressEncryption) {\n      var gen = ref.gen;\n      var num = ref.num;\n      if (xrefEntry.gen !== gen) {\n        throw new _util.FormatError('inconsistent generation in XRef');\n      }\n      var stream = this.stream.makeSubStream(xrefEntry.offset + this.stream.start);\n      var parser = new _parser.Parser(new _parser.Lexer(stream), true, this);\n      var obj1 = parser.getObj();\n      var obj2 = parser.getObj();\n      var obj3 = parser.getObj();\n      if (!Number.isInteger(obj1)) {\n        obj1 = parseInt(obj1, 10);\n      }\n      if (!Number.isInteger(obj2)) {\n        obj2 = parseInt(obj2, 10);\n      }\n      if (obj1 !== num || obj2 !== gen || !(0, _primitives.isCmd)(obj3)) {\n        throw new _util.FormatError('bad XRef entry');\n      }\n      if (obj3.cmd !== 'obj') {\n        if (obj3.cmd.indexOf('obj') === 0) {\n          num = parseInt(obj3.cmd.substring(3), 10);\n          if (!Number.isNaN(num)) {\n            return num;\n          }\n        }\n        throw new _util.FormatError('bad XRef entry');\n      }\n      if (this.encrypt && !suppressEncryption) {\n        xrefEntry = parser.getObj(this.encrypt.createCipherTransform(num, gen));\n      } else {\n        xrefEntry = parser.getObj();\n      }\n      if (!(0, _primitives.isStream)(xrefEntry)) {\n        this.cache[num] = xrefEntry;\n      }\n      return xrefEntry;\n    },\n    fetchCompressed: function XRef_fetchCompressed(xrefEntry, suppressEncryption) {\n      var tableOffset = xrefEntry.offset;\n      var stream = this.fetch(new _primitives.Ref(tableOffset, 0));\n      if (!(0, _primitives.isStream)(stream)) {\n        throw new _util.FormatError('bad ObjStm stream');\n      }\n      var first = stream.dict.get('First');\n      var n = stream.dict.get('N');\n      if (!Number.isInteger(first) || !Number.isInteger(n)) {\n        throw new _util.FormatError('invalid first and n parameters for ObjStm stream');\n      }\n      var parser = new _parser.Parser(new _parser.Lexer(stream), false, this);\n      parser.allowStreams = true;\n      var i,\n          entries = [],\n          num,\n          nums = [];\n      for (i = 0; i < n; ++i) {\n        num = parser.getObj();\n        if (!Number.isInteger(num)) {\n          throw new _util.FormatError('invalid object number in the ObjStm stream: ' + num);\n        }\n        nums.push(num);\n        var offset = parser.getObj();\n        if (!Number.isInteger(offset)) {\n          throw new _util.FormatError('invalid object offset in the ObjStm stream: ' + offset);\n        }\n      }\n      for (i = 0; i < n; ++i) {\n        entries.push(parser.getObj());\n        if ((0, _primitives.isCmd)(parser.buf1, 'endobj')) {\n          parser.shift();\n        }\n        num = nums[i];\n        var entry = this.entries[num];\n        if (entry && entry.offset === tableOffset && entry.gen === i) {\n          this.cache[num] = entries[i];\n        }\n      }\n      xrefEntry = entries[xrefEntry.gen];\n      if (xrefEntry === undefined) {\n        throw new _util.FormatError('bad XRef entry for compressed object');\n      }\n      return xrefEntry;\n    },\n    fetchIfRefAsync: function XRef_fetchIfRefAsync(obj, suppressEncryption) {\n      if (!(0, _primitives.isRef)(obj)) {\n        return Promise.resolve(obj);\n      }\n      return this.fetchAsync(obj, suppressEncryption);\n    },\n    fetchAsync: function XRef_fetchAsync(ref, suppressEncryption) {\n      var streamManager = this.stream.manager;\n      var xref = this;\n      return new Promise(function tryFetch(resolve, reject) {\n        try {\n          resolve(xref.fetch(ref, suppressEncryption));\n        } catch (e) {\n          if (e instanceof _util.MissingDataException) {\n            streamManager.requestRange(e.begin, e.end).then(function () {\n              tryFetch(resolve, reject);\n            }, reject);\n            return;\n          }\n          reject(e);\n        }\n      });\n    },\n    getCatalogObj: function XRef_getCatalogObj() {\n      return this.root;\n    }\n  };\n  return XRef;\n}();\n\nvar NameOrNumberTree = function () {\n  function NameOrNumberTree(root, xref, type) {\n    _classCallCheck(this, NameOrNumberTree);\n\n    if (this.constructor === NameOrNumberTree) {\n      (0, _util.unreachable)('Cannot initialize NameOrNumberTree.');\n    }\n    this.root = root;\n    this.xref = xref;\n    this._type = type;\n  }\n\n  _createClass(NameOrNumberTree, [{\n    key: 'getAll',\n    value: function getAll() {\n      var dict = Object.create(null);\n      if (!this.root) {\n        return dict;\n      }\n      var xref = this.xref;\n      var processed = new _primitives.RefSet();\n      processed.put(this.root);\n      var queue = [this.root];\n      while (queue.length > 0) {\n        var obj = xref.fetchIfRef(queue.shift());\n        if (!(0, _primitives.isDict)(obj)) {\n          continue;\n        }\n        if (obj.has('Kids')) {\n          var kids = obj.get('Kids');\n          for (var i = 0, ii = kids.length; i < ii; i++) {\n            var kid = kids[i];\n            if (processed.has(kid)) {\n              throw new _util.FormatError('Duplicate entry in \"' + this._type + '\" tree.');\n            }\n            queue.push(kid);\n            processed.put(kid);\n          }\n          continue;\n        }\n        var entries = obj.get(this._type);\n        if (Array.isArray(entries)) {\n          for (var _i = 0, _ii = entries.length; _i < _ii; _i += 2) {\n            dict[xref.fetchIfRef(entries[_i])] = xref.fetchIfRef(entries[_i + 1]);\n          }\n        }\n      }\n      return dict;\n    }\n  }, {\n    key: 'get',\n    value: function get(key) {\n      if (!this.root) {\n        return null;\n      }\n      var xref = this.xref;\n      var kidsOrEntries = xref.fetchIfRef(this.root);\n      var loopCount = 0;\n      var MAX_LEVELS = 10;\n      while (kidsOrEntries.has('Kids')) {\n        if (++loopCount > MAX_LEVELS) {\n          (0, _util.warn)('Search depth limit reached for \"' + this._type + '\" tree.');\n          return null;\n        }\n        var kids = kidsOrEntries.get('Kids');\n        if (!Array.isArray(kids)) {\n          return null;\n        }\n        var l = 0,\n            r = kids.length - 1;\n        while (l <= r) {\n          var m = l + r >> 1;\n          var kid = xref.fetchIfRef(kids[m]);\n          var 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 = xref.fetchIfRef(kids[m]);\n            break;\n          }\n        }\n        if (l > r) {\n          return null;\n        }\n      }\n      var entries = kidsOrEntries.get(this._type);\n      if (Array.isArray(entries)) {\n        var _l = 0,\n            _r = entries.length - 2;\n        while (_l <= _r) {\n          var _m = _l + _r & ~1;\n          var 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  }]);\n\n  return NameOrNumberTree;\n}();\n\nvar NameTree = function (_NameOrNumberTree) {\n  _inherits(NameTree, _NameOrNumberTree);\n\n  function NameTree(root, xref) {\n    _classCallCheck(this, NameTree);\n\n    return _possibleConstructorReturn(this, (NameTree.__proto__ || Object.getPrototypeOf(NameTree)).call(this, root, xref, 'Names'));\n  }\n\n  return NameTree;\n}(NameOrNumberTree);\n\nvar NumberTree = function (_NameOrNumberTree2) {\n  _inherits(NumberTree, _NameOrNumberTree2);\n\n  function NumberTree(root, xref) {\n    _classCallCheck(this, NumberTree);\n\n    return _possibleConstructorReturn(this, (NumberTree.__proto__ || Object.getPrototypeOf(NumberTree)).call(this, root, xref, 'Nums'));\n  }\n\n  return NumberTree;\n}(NameOrNumberTree);\n\nvar FileSpec = function FileSpecClosure() {\n  function FileSpec(root, xref) {\n    if (!root || !(0, _primitives.isDict)(root)) {\n      return;\n    }\n    this.xref = xref;\n    this.root = root;\n    if (root.has('FS')) {\n      this.fs = root.get('FS');\n    }\n    this.description = root.has('Desc') ? (0, _util.stringToPDFString)(root.get('Desc')) : '';\n    if (root.has('RF')) {\n      (0, _util.warn)('Related file specifications are not supported');\n    }\n    this.contentAvailable = true;\n    if (!root.has('EF')) {\n      this.contentAvailable = false;\n      (0, _util.warn)('Non-embedded file specifications are not supported');\n    }\n  }\n  function pickPlatformItem(dict) {\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  }\n  FileSpec.prototype = {\n    get filename() {\n      if (!this._filename && this.root) {\n        var filename = pickPlatformItem(this.root) || 'unnamed';\n        this._filename = (0, _util.stringToPDFString)(filename).replace(/\\\\\\\\/g, '\\\\').replace(/\\\\\\//g, '/').replace(/\\\\/g, '/');\n      }\n      return this._filename;\n    },\n    get content() {\n      if (!this.contentAvailable) {\n        return null;\n      }\n      if (!this.contentRef && this.root) {\n        this.contentRef = pickPlatformItem(this.root.get('EF'));\n      }\n      var content = null;\n      if (this.contentRef) {\n        var xref = this.xref;\n        var fileObj = xref.fetchIfRef(this.contentRef);\n        if (fileObj && (0, _primitives.isStream)(fileObj)) {\n          content = fileObj.getBytes();\n        } else {\n          (0, _util.warn)('Embedded file specification points to non-existing/invalid ' + 'content');\n        }\n      } else {\n        (0, _util.warn)('Embedded file specification does not have a content');\n      }\n      return content;\n    },\n    get serializable() {\n      return {\n        filename: this.filename,\n        content: this.content\n      };\n    }\n  };\n  return FileSpec;\n}();\nvar ObjectLoader = function () {\n  function mayHaveChildren(value) {\n    return (0, _primitives.isRef)(value) || (0, _primitives.isDict)(value) || Array.isArray(value) || (0, _primitives.isStream)(value);\n  }\n  function addChildren(node, nodesToVisit) {\n    if ((0, _primitives.isDict)(node) || (0, _primitives.isStream)(node)) {\n      var dict = (0, _primitives.isDict)(node) ? node : node.dict;\n      var dictKeys = dict.getKeys();\n      for (var i = 0, ii = dictKeys.length; i < ii; i++) {\n        var rawValue = dict.getRaw(dictKeys[i]);\n        if (mayHaveChildren(rawValue)) {\n          nodesToVisit.push(rawValue);\n        }\n      }\n    } else if (Array.isArray(node)) {\n      for (var _i2 = 0, _ii2 = node.length; _i2 < _ii2; _i2++) {\n        var value = node[_i2];\n        if (mayHaveChildren(value)) {\n          nodesToVisit.push(value);\n        }\n      }\n    }\n  }\n  function ObjectLoader(dict, keys, xref) {\n    this.dict = dict;\n    this.keys = keys;\n    this.xref = xref;\n    this.refSet = null;\n    this.capability = null;\n  }\n  ObjectLoader.prototype = {\n    load: function load() {\n      this.capability = (0, _util.createPromiseCapability)();\n      if (!(this.xref.stream instanceof _chunked_stream.ChunkedStream) || this.xref.stream.getMissingChunks().length === 0) {\n        this.capability.resolve();\n        return this.capability.promise;\n      }\n      var keys = this.keys,\n          dict = this.dict;\n\n      this.refSet = new _primitives.RefSet();\n      var nodesToVisit = [];\n      for (var i = 0, ii = keys.length; i < ii; i++) {\n        var rawValue = dict.getRaw(keys[i]);\n        if (rawValue !== undefined) {\n          nodesToVisit.push(rawValue);\n        }\n      }\n      this._walk(nodesToVisit);\n      return this.capability.promise;\n    },\n    _walk: function _walk(nodesToVisit) {\n      var _this4 = this;\n\n      var nodesToRevisit = [];\n      var pendingRequests = [];\n      while (nodesToVisit.length) {\n        var currentNode = nodesToVisit.pop();\n        if ((0, _primitives.isRef)(currentNode)) {\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 _util.MissingDataException)) {\n              throw ex;\n            }\n            nodesToRevisit.push(currentNode);\n            pendingRequests.push({\n              begin: ex.begin,\n              end: ex.end\n            });\n          }\n        }\n        if (currentNode && currentNode.getBaseStreams) {\n          var baseStreams = currentNode.getBaseStreams();\n          var foundMissingData = false;\n          for (var i = 0, ii = baseStreams.length; i < ii; i++) {\n            var stream = baseStreams[i];\n            if (stream.getMissingChunks && stream.getMissingChunks().length) {\n              foundMissingData = true;\n              pendingRequests.push({\n                begin: stream.start,\n                end: stream.end\n              });\n            }\n          }\n          if (foundMissingData) {\n            nodesToRevisit.push(currentNode);\n          }\n        }\n        addChildren(currentNode, nodesToVisit);\n      }\n      if (pendingRequests.length) {\n        this.xref.stream.manager.requestRanges(pendingRequests).then(function () {\n          for (var _i3 = 0, _ii3 = nodesToRevisit.length; _i3 < _ii3; _i3++) {\n            var node = nodesToRevisit[_i3];\n            if ((0, _primitives.isRef)(node)) {\n              _this4.refSet.remove(node);\n            }\n          }\n          _this4._walk(nodesToRevisit);\n        }, this.capability.reject);\n        return;\n      }\n      this.refSet = null;\n      this.capability.resolve();\n    }\n  };\n  return ObjectLoader;\n}();\nexports.Catalog = Catalog;\nexports.ObjectLoader = ObjectLoader;\nexports.XRef = XRef;\nexports.FileSpec = FileSpec;\n\n/***/ }),\n/* 123 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar EOF = {};\nvar Name = function NameClosure() {\n  function Name(name) {\n    this.name = name;\n  }\n  Name.prototype = {};\n  var nameCache = Object.create(null);\n  Name.get = function Name_get(name) {\n    var nameValue = nameCache[name];\n    return nameValue ? nameValue : nameCache[name] = new Name(name);\n  };\n  return Name;\n}();\nvar Cmd = function CmdClosure() {\n  function Cmd(cmd) {\n    this.cmd = cmd;\n  }\n  Cmd.prototype = {};\n  var cmdCache = Object.create(null);\n  Cmd.get = function Cmd_get(cmd) {\n    var cmdValue = cmdCache[cmd];\n    return cmdValue ? cmdValue : cmdCache[cmd] = new Cmd(cmd);\n  };\n  return Cmd;\n}();\nvar Dict = function DictClosure() {\n  var nonSerializable = function nonSerializableClosure() {\n    return nonSerializable;\n  };\n  function Dict(xref) {\n    this._map = Object.create(null);\n    this.xref = xref;\n    this.objId = null;\n    this.suppressEncryption = false;\n    this.__nonSerializable__ = nonSerializable;\n  }\n  Dict.prototype = {\n    assignXref: function Dict_assignXref(newXref) {\n      this.xref = newXref;\n    },\n    get: function Dict_get(key1, key2, key3) {\n      var value;\n      var xref = this.xref,\n          suppressEncryption = this.suppressEncryption;\n      if (typeof (value = this._map[key1]) !== 'undefined' || key1 in this._map || typeof key2 === 'undefined') {\n        return xref ? xref.fetchIfRef(value, suppressEncryption) : value;\n      }\n      if (typeof (value = this._map[key2]) !== 'undefined' || key2 in this._map || typeof key3 === 'undefined') {\n        return xref ? xref.fetchIfRef(value, suppressEncryption) : value;\n      }\n      value = this._map[key3] || null;\n      return xref ? xref.fetchIfRef(value, suppressEncryption) : value;\n    },\n    getAsync: function Dict_getAsync(key1, key2, key3) {\n      var value;\n      var xref = this.xref,\n          suppressEncryption = this.suppressEncryption;\n      if (typeof (value = this._map[key1]) !== 'undefined' || key1 in this._map || typeof key2 === 'undefined') {\n        if (xref) {\n          return xref.fetchIfRefAsync(value, suppressEncryption);\n        }\n        return Promise.resolve(value);\n      }\n      if (typeof (value = this._map[key2]) !== 'undefined' || key2 in this._map || typeof key3 === 'undefined') {\n        if (xref) {\n          return xref.fetchIfRefAsync(value, suppressEncryption);\n        }\n        return Promise.resolve(value);\n      }\n      value = this._map[key3] || null;\n      if (xref) {\n        return xref.fetchIfRefAsync(value, suppressEncryption);\n      }\n      return Promise.resolve(value);\n    },\n    getArray: function Dict_getArray(key1, key2, key3) {\n      var value = this.get(key1, key2, key3);\n      var xref = this.xref,\n          suppressEncryption = this.suppressEncryption;\n      if (!Array.isArray(value) || !xref) {\n        return value;\n      }\n      value = value.slice();\n      for (var i = 0, ii = value.length; i < ii; i++) {\n        if (!isRef(value[i])) {\n          continue;\n        }\n        value[i] = xref.fetch(value[i], suppressEncryption);\n      }\n      return value;\n    },\n    getRaw: function Dict_getRaw(key) {\n      return this._map[key];\n    },\n    getKeys: function Dict_getKeys() {\n      return Object.keys(this._map);\n    },\n    set: function Dict_set(key, value) {\n      this._map[key] = value;\n    },\n    has: function Dict_has(key) {\n      return key in this._map;\n    },\n    forEach: function Dict_forEach(callback) {\n      for (var key in this._map) {\n        callback(key, this.get(key));\n      }\n    }\n  };\n  Dict.empty = new Dict(null);\n  Dict.merge = function (xref, dictArray) {\n    var mergedDict = new Dict(xref);\n    for (var i = 0, ii = dictArray.length; i < ii; i++) {\n      var dict = dictArray[i];\n      if (!isDict(dict)) {\n        continue;\n      }\n      for (var keyName in dict._map) {\n        if (mergedDict._map[keyName] !== undefined) {\n          continue;\n        }\n        mergedDict._map[keyName] = dict._map[keyName];\n      }\n    }\n    return mergedDict;\n  };\n  return Dict;\n}();\nvar Ref = function RefClosure() {\n  function Ref(num, gen) {\n    this.num = num;\n    this.gen = gen;\n  }\n  Ref.prototype = {\n    toString: function Ref_toString() {\n      var str = this.num + 'R';\n      if (this.gen !== 0) {\n        str += this.gen;\n      }\n      return str;\n    }\n  };\n  return Ref;\n}();\nvar RefSet = function RefSetClosure() {\n  function RefSet() {\n    this.dict = Object.create(null);\n  }\n  RefSet.prototype = {\n    has: function RefSet_has(ref) {\n      return ref.toString() in this.dict;\n    },\n    put: function RefSet_put(ref) {\n      this.dict[ref.toString()] = true;\n    },\n    remove: function RefSet_remove(ref) {\n      delete this.dict[ref.toString()];\n    }\n  };\n  return RefSet;\n}();\nvar RefSetCache = function RefSetCacheClosure() {\n  function RefSetCache() {\n    this.dict = Object.create(null);\n  }\n  RefSetCache.prototype = {\n    get: function RefSetCache_get(ref) {\n      return this.dict[ref.toString()];\n    },\n    has: function RefSetCache_has(ref) {\n      return ref.toString() in this.dict;\n    },\n    put: function RefSetCache_put(ref, obj) {\n      this.dict[ref.toString()] = obj;\n    },\n    putAlias: function RefSetCache_putAlias(ref, aliasRef) {\n      this.dict[ref.toString()] = this.get(aliasRef);\n    },\n    forEach: function RefSetCache_forEach(fn, thisArg) {\n      for (var i in this.dict) {\n        fn.call(thisArg, this.dict[i]);\n      }\n    },\n    clear: function RefSetCache_clear() {\n      this.dict = Object.create(null);\n    }\n  };\n  return RefSetCache;\n}();\nfunction isEOF(v) {\n  return v === EOF;\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 isRef(v) {\n  return v instanceof Ref;\n}\nfunction isRefsEqual(v1, v2) {\n  return v1.num === v2.num && v1.gen === v2.gen;\n}\nfunction isStream(v) {\n  return (typeof v === 'undefined' ? 'undefined' : _typeof(v)) === 'object' && v !== null && v.getBytes !== undefined;\n}\nexports.EOF = EOF;\nexports.Cmd = Cmd;\nexports.Dict = Dict;\nexports.Name = Name;\nexports.Ref = Ref;\nexports.RefSet = RefSet;\nexports.RefSetCache = RefSetCache;\nexports.isEOF = isEOF;\nexports.isCmd = isCmd;\nexports.isDict = isDict;\nexports.isName = isName;\nexports.isRef = isRef;\nexports.isRefsEqual = isRefsEqual;\nexports.isStream = isStream;\n\n/***/ }),\n/* 124 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Parser = exports.Linearization = exports.Lexer = undefined;\n\nvar _stream = __w_pdfjs_require__(125);\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _primitives = __w_pdfjs_require__(123);\n\nvar _ccitt_stream = __w_pdfjs_require__(126);\n\nvar _jbig2_stream = __w_pdfjs_require__(128);\n\nvar _jpeg_stream = __w_pdfjs_require__(131);\n\nvar _jpx_stream = __w_pdfjs_require__(133);\n\nvar MAX_LENGTH_TO_CACHE = 1000;\nvar MAX_ADLER32_LENGTH = 5552;\nfunction computeAdler32(bytes) {\n  var bytesLength = bytes.length;\n  var a = 1,\n      b = 0;\n  for (var i = 0; i < bytesLength; ++i) {\n    a += bytes[i] & 0xFF;\n    b += a;\n  }\n  return b % 65521 << 16 | a % 65521;\n}\nvar Parser = function ParserClosure() {\n  function Parser(lexer, allowStreams, xref, recoveryMode) {\n    this.lexer = lexer;\n    this.allowStreams = allowStreams;\n    this.xref = xref;\n    this.recoveryMode = recoveryMode || false;\n    this.imageCache = Object.create(null);\n    this.refill();\n  }\n  Parser.prototype = {\n    refill: function Parser_refill() {\n      this.buf1 = this.lexer.getObj();\n      this.buf2 = this.lexer.getObj();\n    },\n    shift: function Parser_shift() {\n      if ((0, _primitives.isCmd)(this.buf2, '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: function Parser_tryShift() {\n      try {\n        this.shift();\n        return true;\n      } catch (e) {\n        if (e instanceof _util.MissingDataException) {\n          throw e;\n        }\n        return false;\n      }\n    },\n    getObj: function Parser_getObj(cipherTransform) {\n      var buf1 = this.buf1;\n      this.shift();\n      if (buf1 instanceof _primitives.Cmd) {\n        switch (buf1.cmd) {\n          case 'BI':\n            return this.makeInlineImage(cipherTransform);\n          case '[':\n            var array = [];\n            while (!(0, _primitives.isCmd)(this.buf1, ']') && !(0, _primitives.isEOF)(this.buf1)) {\n              array.push(this.getObj(cipherTransform));\n            }\n            if ((0, _primitives.isEOF)(this.buf1)) {\n              if (!this.recoveryMode) {\n                throw new _util.FormatError('End of file inside array');\n              }\n              return array;\n            }\n            this.shift();\n            return array;\n          case '<<':\n            var dict = new _primitives.Dict(this.xref);\n            while (!(0, _primitives.isCmd)(this.buf1, '>>') && !(0, _primitives.isEOF)(this.buf1)) {\n              if (!(0, _primitives.isName)(this.buf1)) {\n                (0, _util.info)('Malformed dictionary: key must be a name object');\n                this.shift();\n                continue;\n              }\n              var key = this.buf1.name;\n              this.shift();\n              if ((0, _primitives.isEOF)(this.buf1)) {\n                break;\n              }\n              dict.set(key, this.getObj(cipherTransform));\n            }\n            if ((0, _primitives.isEOF)(this.buf1)) {\n              if (!this.recoveryMode) {\n                throw new _util.FormatError('End of file inside dictionary');\n              }\n              return dict;\n            }\n            if ((0, _primitives.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        var num = buf1;\n        if (Number.isInteger(this.buf1) && (0, _primitives.isCmd)(this.buf2, 'R')) {\n          var ref = new _primitives.Ref(num, this.buf1);\n          this.shift();\n          this.shift();\n          return ref;\n        }\n        return num;\n      }\n      if ((0, _util.isString)(buf1)) {\n        var str = buf1;\n        if (cipherTransform) {\n          str = cipherTransform.decryptString(str);\n        }\n        return str;\n      }\n      return buf1;\n    },\n    findDefaultInlineStreamEnd: function findDefaultInlineStreamEnd(stream) {\n      var E = 0x45,\n          I = 0x49,\n          SPACE = 0x20,\n          LF = 0xA,\n          CR = 0xD;\n      var n = 10,\n          NUL = 0x0;\n      var startPos = stream.pos,\n          state = 0,\n          ch = void 0,\n          maybeEIPos = void 0;\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          (0, _util.assert)(state === 2);\n          if (ch === SPACE || ch === LF || ch === CR) {\n            maybeEIPos = stream.pos;\n            var followingBytes = stream.peekBytes(n);\n            for (var i = 0, ii = followingBytes.length; 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              break;\n            }\n          } else {\n            state = 0;\n          }\n        }\n      }\n      if (ch === -1) {\n        (0, _util.warn)('findDefaultInlineStreamEnd: ' + 'Reached the end of the stream without finding a valid EI marker');\n        if (maybeEIPos) {\n          (0, _util.warn)('... trying to recover by using the last \"EI\" occurrence.');\n          stream.skip(-(stream.pos - maybeEIPos));\n        }\n      }\n      return stream.pos - 4 - startPos;\n    },\n\n    findDCTDecodeInlineStreamEnd: function Parser_findDCTDecodeInlineStreamEnd(stream) {\n      var startPos = stream.pos,\n          foundEOI = false,\n          b,\n          markerLength,\n          length;\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      length = stream.pos - startPos;\n      if (b === -1) {\n        (0, _util.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: function Parser_findASCII85DecodeInlineStreamEnd(stream) {\n      var TILDE = 0x7E,\n          GT = 0x3E;\n      var startPos = stream.pos,\n          ch,\n          length;\n      while ((ch = stream.getByte()) !== -1) {\n        if (ch === TILDE && stream.peekByte() === GT) {\n          stream.skip();\n          break;\n        }\n      }\n      length = stream.pos - startPos;\n      if (ch === -1) {\n        (0, _util.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: function Parser_findASCIIHexDecodeInlineStreamEnd(stream) {\n      var GT = 0x3E;\n      var startPos = stream.pos,\n          ch,\n          length;\n      while ((ch = stream.getByte()) !== -1) {\n        if (ch === GT) {\n          break;\n        }\n      }\n      length = stream.pos - startPos;\n      if (ch === -1) {\n        (0, _util.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: function Parser_inlineStreamSkipEI(stream) {\n      var E = 0x45,\n          I = 0x49;\n      var 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: function Parser_makeInlineImage(cipherTransform) {\n      var lexer = this.lexer;\n      var stream = lexer.stream;\n      var dict = new _primitives.Dict(this.xref),\n          dictLength = void 0;\n      while (!(0, _primitives.isCmd)(this.buf1, 'ID') && !(0, _primitives.isEOF)(this.buf1)) {\n        if (!(0, _primitives.isName)(this.buf1)) {\n          throw new _util.FormatError('Dictionary key must be a name object');\n        }\n        var key = this.buf1.name;\n        this.shift();\n        if ((0, _primitives.isEOF)(this.buf1)) {\n          break;\n        }\n        dict.set(key, this.getObj(cipherTransform));\n      }\n      if (lexer.beginInlineImagePos !== -1) {\n        dictLength = stream.pos - lexer.beginInlineImagePos;\n      }\n      var filter = dict.get('Filter', 'F'),\n          filterName;\n      if ((0, _primitives.isName)(filter)) {\n        filterName = filter.name;\n      } else if (Array.isArray(filter)) {\n        var filterZero = this.xref.fetchIfRef(filter[0]);\n        if ((0, _primitives.isName)(filterZero)) {\n          filterName = filterZero.name;\n        }\n      }\n      var startPos = stream.pos,\n          length = void 0;\n      if (filterName === 'DCTDecode' || filterName === 'DCT') {\n        length = this.findDCTDecodeInlineStreamEnd(stream);\n      } else if (filterName === 'ASCII85Decode' || filterName === 'A85') {\n        length = this.findASCII85DecodeInlineStreamEnd(stream);\n      } else if (filterName === 'ASCIIHexDecode' || filterName === 'AHx') {\n        length = this.findASCIIHexDecodeInlineStreamEnd(stream);\n      } else {\n        length = this.findDefaultInlineStreamEnd(stream);\n      }\n      var imageStream = stream.makeSubStream(startPos, length, dict);\n      var cacheKey = void 0;\n      if (length < MAX_LENGTH_TO_CACHE && dictLength < MAX_ADLER32_LENGTH) {\n        var imageBytes = imageStream.getBytes();\n        imageStream.reset();\n        var initialStreamPos = stream.pos;\n        stream.pos = lexer.beginInlineImagePos;\n        var dictBytes = stream.getBytes(dictLength);\n        stream.pos = initialStreamPos;\n        cacheKey = computeAdler32(imageBytes) + '_' + computeAdler32(dictBytes);\n        var cacheEntry = this.imageCache[cacheKey];\n        if (cacheEntry !== undefined) {\n          this.buf2 = _primitives.Cmd.get('EI');\n          this.shift();\n          cacheEntry.reset();\n          return cacheEntry;\n        }\n      }\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_' + length + '_' + cacheKey;\n        this.imageCache[cacheKey] = imageStream;\n      }\n      this.buf2 = _primitives.Cmd.get('EI');\n      this.shift();\n      return imageStream;\n    },\n    makeStream: function Parser_makeStream(dict, cipherTransform) {\n      var lexer = this.lexer;\n      var stream = lexer.stream;\n      lexer.skipToNextLine();\n      var pos = stream.pos - 1;\n      var length = dict.get('Length');\n      if (!Number.isInteger(length)) {\n        (0, _util.info)('Bad ' + length + ' attribute in stream');\n        length = 0;\n      }\n      stream.pos = pos + length;\n      lexer.nextChar();\n      if (this.tryShift() && (0, _primitives.isCmd)(this.buf2, 'endstream')) {\n        this.shift();\n      } else {\n        stream.pos = pos;\n        var SCAN_BLOCK_SIZE = 2048;\n        var ENDSTREAM_SIGNATURE_LENGTH = 9;\n        var ENDSTREAM_SIGNATURE = [0x65, 0x6E, 0x64, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6D];\n        var skipped = 0,\n            found = false,\n            i,\n            j;\n        while (stream.pos < stream.end) {\n          var scanBytes = stream.peekBytes(SCAN_BLOCK_SIZE);\n          var scanLength = scanBytes.length - ENDSTREAM_SIGNATURE_LENGTH;\n          if (scanLength <= 0) {\n            break;\n          }\n          found = false;\n          i = 0;\n          while (i < scanLength) {\n            j = 0;\n            while (j < ENDSTREAM_SIGNATURE_LENGTH && scanBytes[i + j] === ENDSTREAM_SIGNATURE[j]) {\n              j++;\n            }\n            if (j >= ENDSTREAM_SIGNATURE_LENGTH) {\n              found = true;\n              break;\n            }\n            i++;\n          }\n          if (found) {\n            skipped += i;\n            stream.pos += i;\n            break;\n          }\n          skipped += scanLength;\n          stream.pos += scanLength;\n        }\n        if (!found) {\n          throw new _util.FormatError('Missing endstream');\n        }\n        length = skipped;\n        lexer.nextChar();\n        this.shift();\n        this.shift();\n      }\n      this.shift();\n      stream = stream.makeSubStream(pos, 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: function Parser_filter(stream, dict, length) {\n      var filter = dict.get('Filter', 'F');\n      var params = dict.get('DecodeParms', 'DP');\n      if ((0, _primitives.isName)(filter)) {\n        if (Array.isArray(params)) {\n          (0, _util.warn)('/DecodeParms should not contain an Array, ' + 'when /Filter contains a Name.');\n        }\n        return this.makeFilter(stream, filter.name, length, params);\n      }\n      var maybeLength = length;\n      if (Array.isArray(filter)) {\n        var filterArray = filter;\n        var paramsArray = params;\n        for (var i = 0, ii = filterArray.length; i < ii; ++i) {\n          filter = this.xref.fetchIfRef(filterArray[i]);\n          if (!(0, _primitives.isName)(filter)) {\n            throw new _util.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: function Parser_makeFilter(stream, name, maybeLength, params) {\n      if (maybeLength === 0) {\n        (0, _util.warn)('Empty \"' + name + '\" stream.');\n        return new _stream.NullStream();\n      }\n      try {\n        var xrefStreamStats = this.xref.stats.streamTypes;\n        if (name === 'FlateDecode' || name === 'Fl') {\n          xrefStreamStats[_util.StreamType.FLATE] = true;\n          if (params) {\n            return new _stream.PredictorStream(new _stream.FlateStream(stream, maybeLength), maybeLength, params);\n          }\n          return new _stream.FlateStream(stream, maybeLength);\n        }\n        if (name === 'LZWDecode' || name === 'LZW') {\n          xrefStreamStats[_util.StreamType.LZW] = true;\n          var earlyChange = 1;\n          if (params) {\n            if (params.has('EarlyChange')) {\n              earlyChange = params.get('EarlyChange');\n            }\n            return new _stream.PredictorStream(new _stream.LZWStream(stream, maybeLength, earlyChange), maybeLength, params);\n          }\n          return new _stream.LZWStream(stream, maybeLength, earlyChange);\n        }\n        if (name === 'DCTDecode' || name === 'DCT') {\n          xrefStreamStats[_util.StreamType.DCT] = true;\n          return new _jpeg_stream.JpegStream(stream, maybeLength, stream.dict, params);\n        }\n        if (name === 'JPXDecode' || name === 'JPX') {\n          xrefStreamStats[_util.StreamType.JPX] = true;\n          return new _jpx_stream.JpxStream(stream, maybeLength, stream.dict, params);\n        }\n        if (name === 'ASCII85Decode' || name === 'A85') {\n          xrefStreamStats[_util.StreamType.A85] = true;\n          return new _stream.Ascii85Stream(stream, maybeLength);\n        }\n        if (name === 'ASCIIHexDecode' || name === 'AHx') {\n          xrefStreamStats[_util.StreamType.AHX] = true;\n          return new _stream.AsciiHexStream(stream, maybeLength);\n        }\n        if (name === 'CCITTFaxDecode' || name === 'CCF') {\n          xrefStreamStats[_util.StreamType.CCF] = true;\n          return new _ccitt_stream.CCITTFaxStream(stream, maybeLength, params);\n        }\n        if (name === 'RunLengthDecode' || name === 'RL') {\n          xrefStreamStats[_util.StreamType.RL] = true;\n          return new _stream.RunLengthStream(stream, maybeLength);\n        }\n        if (name === 'JBIG2Decode') {\n          xrefStreamStats[_util.StreamType.JBIG] = true;\n          return new _jbig2_stream.Jbig2Stream(stream, maybeLength, stream.dict, params);\n        }\n        (0, _util.warn)('filter \"' + name + '\" not supported yet');\n        return stream;\n      } catch (ex) {\n        if (ex instanceof _util.MissingDataException) {\n          throw ex;\n        }\n        (0, _util.warn)('Invalid stream: \\\"' + ex + '\\\"');\n        return new _stream.NullStream();\n      }\n    }\n  };\n  return Parser;\n}();\nvar Lexer = function LexerClosure() {\n  function Lexer(stream, knownCommands) {\n    this.stream = stream;\n    this.nextChar();\n    this.strBuf = [];\n    this.knownCommands = knownCommands;\n    this.beginInlineImagePos = -1;\n  }\n  var 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];\n  function 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  }\n  Lexer.prototype = {\n    nextChar: function Lexer_nextChar() {\n      return this.currentChar = this.stream.getByte();\n    },\n    peekChar: function Lexer_peekChar() {\n      return this.stream.peekByte();\n    },\n    getNumber: function Lexer_getNumber() {\n      var ch = this.currentChar;\n      var eNotation = false;\n      var divideBy = 0;\n      var sign = 0;\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        sign = 1;\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        if (divideBy === 10 && sign === 0 && ((0, _util.isSpace)(ch) || ch === -1)) {\n          (0, _util.warn)('Lexer.getNumber - treating a single decimal point as zero.');\n          return 0;\n        }\n        throw new _util.FormatError('Invalid number: ' + String.fromCharCode(ch) + ' (charCode ' + ch + ')');\n      }\n      sign = sign || 1;\n      var baseValue = ch - 0x30;\n      var powerValue = 0;\n      var powerValueSign = 1;\n      while ((ch = this.nextChar()) >= 0) {\n        if (0x30 <= ch && ch <= 0x39) {\n          var 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          (0, _util.warn)('Badly formatted number');\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 *= Math.pow(10, powerValueSign * powerValue);\n      }\n      return sign * baseValue;\n    },\n    getString: function Lexer_getString() {\n      var numParen = 1;\n      var done = false;\n      var strBuf = this.strBuf;\n      strBuf.length = 0;\n      var ch = this.nextChar();\n      while (true) {\n        var charBuffered = false;\n        switch (ch | 0) {\n          case -1:\n            (0, _util.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                (0, _util.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                var 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: function Lexer_getName() {\n      var ch, previousCh;\n      var 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            (0, _util.warn)('Lexer_getName: ' + 'NUMBER SIGN (#) should be followed by a hexadecimal number.');\n            strBuf.push('#');\n            break;\n          }\n          var x = toHexDigit(ch);\n          if (x !== -1) {\n            previousCh = ch;\n            ch = this.nextChar();\n            var x2 = toHexDigit(ch);\n            if (x2 === -1) {\n              (0, _util.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        (0, _util.warn)('name token is longer than allowed by the spec: ' + strBuf.length);\n      }\n      return _primitives.Name.get(strBuf.join(''));\n    },\n    getHexString: function Lexer_getHexString() {\n      var strBuf = this.strBuf;\n      strBuf.length = 0;\n      var ch = this.currentChar;\n      var isFirstHex = true;\n      var firstDigit;\n      var secondDigit;\n      while (true) {\n        if (ch < 0) {\n          (0, _util.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              (0, _util.warn)('Ignoring invalid character \"' + ch + '\" in hex string');\n              ch = this.nextChar();\n              continue;\n            }\n          } else {\n            secondDigit = toHexDigit(ch);\n            if (secondDigit === -1) {\n              (0, _util.warn)('Ignoring invalid character \"' + ch + '\" in hex string');\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: function Lexer_getObj() {\n      var comment = false;\n      var ch = this.currentChar;\n      while (true) {\n        if (ch < 0) {\n          return _primitives.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 _primitives.Cmd.get('[');\n        case 0x5D:\n          this.nextChar();\n          return _primitives.Cmd.get(']');\n        case 0x3C:\n          ch = this.nextChar();\n          if (ch === 0x3C) {\n            this.nextChar();\n            return _primitives.Cmd.get('<<');\n          }\n          return this.getHexString();\n        case 0x3E:\n          ch = this.nextChar();\n          if (ch === 0x3E) {\n            this.nextChar();\n            return _primitives.Cmd.get('>>');\n          }\n          return _primitives.Cmd.get('>');\n        case 0x7B:\n          this.nextChar();\n          return _primitives.Cmd.get('{');\n        case 0x7D:\n          this.nextChar();\n          return _primitives.Cmd.get('}');\n        case 0x29:\n          this.nextChar();\n          throw new _util.FormatError('Illegal character: ' + ch);\n      }\n      var str = String.fromCharCode(ch);\n      var knownCommands = this.knownCommands;\n      var knownCommandFound = knownCommands && knownCommands[str] !== undefined;\n      while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) {\n        var possibleCommand = str + String.fromCharCode(ch);\n        if (knownCommandFound && knownCommands[possibleCommand] === undefined) {\n          break;\n        }\n        if (str.length === 128) {\n          throw new _util.FormatError('Command token too long: ' + str.length);\n        }\n        str = possibleCommand;\n        knownCommandFound = knownCommands && 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 _primitives.Cmd.get(str);\n    },\n    skipToNextLine: function Lexer_skipToNextLine() {\n      var 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  };\n  return Lexer;\n}();\nvar Linearization = {\n  create: function LinearizationCreate(stream) {\n    function getInt(name, allowZeroValue) {\n      var 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() {\n      var hints = linDict.get('H'),\n          hintsLength,\n          item;\n      if (Array.isArray(hints) && ((hintsLength = hints.length) === 2 || hintsLength === 4)) {\n        for (var index = 0; index < hintsLength; index++) {\n          if (!(Number.isInteger(item = hints[index]) && item > 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    var parser = new Parser(new Lexer(stream), false, null);\n    var obj1 = parser.getObj();\n    var obj2 = parser.getObj();\n    var obj3 = parser.getObj();\n    var linDict = parser.getObj();\n    var obj, length;\n    if (!(Number.isInteger(obj1) && Number.isInteger(obj2) && (0, _primitives.isCmd)(obj3, 'obj') && (0, _primitives.isDict)(linDict) && (0, _util.isNum)(obj = linDict.get('Linearized')) && obj > 0)) {\n      return null;\n    } else if ((length = getInt('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: length,\n      hints: getHints(),\n      objectNumberFirst: getInt('O'),\n      endFirst: getInt('E'),\n      numPages: getInt('N'),\n      mainXRefEntriesOffset: getInt('T'),\n      pageFirst: linDict.has('P') ? getInt('P', true) : 0\n    };\n  }\n};\nexports.Lexer = Lexer;\nexports.Linearization = Linearization;\nexports.Parser = Parser;\n\n/***/ }),\n/* 125 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.LZWStream = exports.StringStream = exports.StreamsSequenceStream = exports.Stream = exports.RunLengthStream = exports.PredictorStream = exports.NullStream = exports.FlateStream = exports.DecodeStream = exports.DecryptStream = exports.AsciiHexStream = exports.Ascii85Stream = undefined;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _primitives = __w_pdfjs_require__(123);\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar Stream = function StreamClosure() {\n  function Stream(arrayBuffer, start, length, dict) {\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  Stream.prototype = {\n    get length() {\n      return this.end - this.start;\n    },\n    get isEmpty() {\n      return this.length === 0;\n    },\n    getByte: function Stream_getByte() {\n      if (this.pos >= this.end) {\n        return -1;\n      }\n      return this.bytes[this.pos++];\n    },\n    getUint16: function Stream_getUint16() {\n      var b0 = this.getByte();\n      var b1 = this.getByte();\n      if (b0 === -1 || b1 === -1) {\n        return -1;\n      }\n      return (b0 << 8) + b1;\n    },\n    getInt32: function Stream_getInt32() {\n      var b0 = this.getByte();\n      var b1 = this.getByte();\n      var b2 = this.getByte();\n      var b3 = this.getByte();\n      return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;\n    },\n    getBytes: function getBytes(length) {\n      var forceClamped = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n      var bytes = this.bytes;\n      var pos = this.pos;\n      var strEnd = this.end;\n      if (!length) {\n        var _subarray = bytes.subarray(pos, strEnd);\n        return forceClamped ? new Uint8ClampedArray(_subarray) : _subarray;\n      }\n      var end = pos + length;\n      if (end > strEnd) {\n        end = strEnd;\n      }\n      this.pos = end;\n      var subarray = bytes.subarray(pos, end);\n      return forceClamped ? new Uint8ClampedArray(subarray) : subarray;\n    },\n\n    peekByte: function Stream_peekByte() {\n      var peekedByte = this.getByte();\n      this.pos--;\n      return peekedByte;\n    },\n    peekBytes: function peekBytes(length) {\n      var forceClamped = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n      var bytes = this.getBytes(length, forceClamped);\n      this.pos -= bytes.length;\n      return bytes;\n    },\n\n    skip: function Stream_skip(n) {\n      if (!n) {\n        n = 1;\n      }\n      this.pos += n;\n    },\n    reset: function Stream_reset() {\n      this.pos = this.start;\n    },\n    moveStart: function Stream_moveStart() {\n      this.start = this.pos;\n    },\n    makeSubStream: function Stream_makeSubStream(start, length, dict) {\n      return new Stream(this.bytes.buffer, start, length, dict);\n    }\n  };\n  return Stream;\n}();\nvar StringStream = function StringStreamClosure() {\n  function StringStream(str) {\n    var bytes = (0, _util.stringToBytes)(str);\n    Stream.call(this, bytes);\n  }\n  StringStream.prototype = Stream.prototype;\n  return StringStream;\n}();\nvar DecodeStream = function DecodeStreamClosure() {\n  var emptyBuffer = new Uint8Array(0);\n  function DecodeStream(maybeMinBufferLength) {\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  DecodeStream.prototype = {\n    get isEmpty() {\n      while (!this.eof && this.bufferLength === 0) {\n        this.readBlock();\n      }\n      return this.bufferLength === 0;\n    },\n    ensureBuffer: function DecodeStream_ensureBuffer(requested) {\n      var buffer = this.buffer;\n      if (requested <= buffer.byteLength) {\n        return buffer;\n      }\n      var size = this.minBufferLength;\n      while (size < requested) {\n        size *= 2;\n      }\n      var buffer2 = new Uint8Array(size);\n      buffer2.set(buffer);\n      return this.buffer = buffer2;\n    },\n    getByte: function DecodeStream_getByte() {\n      var 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    getUint16: function DecodeStream_getUint16() {\n      var b0 = this.getByte();\n      var b1 = this.getByte();\n      if (b0 === -1 || b1 === -1) {\n        return -1;\n      }\n      return (b0 << 8) + b1;\n    },\n    getInt32: function DecodeStream_getInt32() {\n      var b0 = this.getByte();\n      var b1 = this.getByte();\n      var b2 = this.getByte();\n      var b3 = this.getByte();\n      return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;\n    },\n    getBytes: function getBytes(length) {\n      var forceClamped = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n      var end,\n          pos = this.pos;\n      if (length) {\n        this.ensureBuffer(pos + length);\n        end = pos + length;\n        while (!this.eof && this.bufferLength < end) {\n          this.readBlock();\n        }\n        var bufEnd = this.bufferLength;\n        if (end > bufEnd) {\n          end = bufEnd;\n        }\n      } else {\n        while (!this.eof) {\n          this.readBlock();\n        }\n        end = this.bufferLength;\n      }\n      this.pos = end;\n      var subarray = this.buffer.subarray(pos, end);\n      return forceClamped && !(subarray instanceof Uint8ClampedArray) ? new Uint8ClampedArray(subarray) : subarray;\n    },\n\n    peekByte: function DecodeStream_peekByte() {\n      var peekedByte = this.getByte();\n      this.pos--;\n      return peekedByte;\n    },\n    peekBytes: function peekBytes(length) {\n      var forceClamped = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n      var bytes = this.getBytes(length, forceClamped);\n      this.pos -= bytes.length;\n      return bytes;\n    },\n\n    makeSubStream: function DecodeStream_makeSubStream(start, length, dict) {\n      var end = start + length;\n      while (this.bufferLength <= end && !this.eof) {\n        this.readBlock();\n      }\n      return new Stream(this.buffer, start, length, dict);\n    },\n    skip: function DecodeStream_skip(n) {\n      if (!n) {\n        n = 1;\n      }\n      this.pos += n;\n    },\n    reset: function DecodeStream_reset() {\n      this.pos = 0;\n    },\n    getBaseStreams: function DecodeStream_getBaseStreams() {\n      if (this.str && this.str.getBaseStreams) {\n        return this.str.getBaseStreams();\n      }\n      return [];\n    }\n  };\n  return DecodeStream;\n}();\nvar StreamsSequenceStream = function StreamsSequenceStreamClosure() {\n  function StreamsSequenceStream(streams) {\n    this.streams = streams;\n    var maybeLength = 0;\n    for (var i = 0, ii = streams.length; i < ii; i++) {\n      var stream = streams[i];\n      if (stream instanceof DecodeStream) {\n        maybeLength += stream._rawMinBufferLength;\n      } else {\n        maybeLength += stream.length;\n      }\n    }\n    DecodeStream.call(this, maybeLength);\n  }\n  StreamsSequenceStream.prototype = Object.create(DecodeStream.prototype);\n  StreamsSequenceStream.prototype.readBlock = function streamSequenceStreamReadBlock() {\n    var streams = this.streams;\n    if (streams.length === 0) {\n      this.eof = true;\n      return;\n    }\n    var stream = streams.shift();\n    var chunk = stream.getBytes();\n    var bufferLength = this.bufferLength;\n    var newLength = bufferLength + chunk.length;\n    var buffer = this.ensureBuffer(newLength);\n    buffer.set(chunk, bufferLength);\n    this.bufferLength = newLength;\n  };\n  StreamsSequenceStream.prototype.getBaseStreams = function StreamsSequenceStream_getBaseStreams() {\n    var baseStreams = [];\n    for (var i = 0, ii = this.streams.length; i < ii; i++) {\n      var stream = this.streams[i];\n      if (stream.getBaseStreams) {\n        baseStreams.push.apply(baseStreams, _toConsumableArray(stream.getBaseStreams()));\n      }\n    }\n    return baseStreams;\n  };\n  return StreamsSequenceStream;\n}();\nvar FlateStream = function FlateStreamClosure() {\n  var codeLenCodeMap = new Int32Array([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n  var 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]);\n  var 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]);\n  var 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];\n  var 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];\n  function FlateStream(str, maybeLength) {\n    this.str = str;\n    this.dict = str.dict;\n    var cmf = str.getByte();\n    var flg = str.getByte();\n    if (cmf === -1 || flg === -1) {\n      throw new _util.FormatError('Invalid header in flate stream: ' + cmf + ', ' + flg);\n    }\n    if ((cmf & 0x0f) !== 0x08) {\n      throw new _util.FormatError('Unknown compression method in flate stream: ' + cmf + ', ' + flg);\n    }\n    if (((cmf << 8) + flg) % 31 !== 0) {\n      throw new _util.FormatError('Bad FCHECK in flate stream: ' + cmf + ', ' + flg);\n    }\n    if (flg & 0x20) {\n      throw new _util.FormatError('FDICT bit set in flate stream: ' + cmf + ', ' + flg);\n    }\n    this.codeSize = 0;\n    this.codeBuf = 0;\n    DecodeStream.call(this, maybeLength);\n  }\n  FlateStream.prototype = Object.create(DecodeStream.prototype);\n  FlateStream.prototype.getBits = function FlateStream_getBits(bits) {\n    var str = this.str;\n    var codeSize = this.codeSize;\n    var codeBuf = this.codeBuf;\n    var b;\n    while (codeSize < bits) {\n      if ((b = str.getByte()) === -1) {\n        throw new _util.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  FlateStream.prototype.getCode = function FlateStream_getCode(table) {\n    var str = this.str;\n    var codes = table[0];\n    var maxLen = table[1];\n    var codeSize = this.codeSize;\n    var codeBuf = this.codeBuf;\n    var b;\n    while (codeSize < maxLen) {\n      if ((b = str.getByte()) === -1) {\n        break;\n      }\n      codeBuf |= b << codeSize;\n      codeSize += 8;\n    }\n    var code = codes[codeBuf & (1 << maxLen) - 1];\n    var codeLen = code >> 16;\n    var codeVal = code & 0xffff;\n    if (codeLen < 1 || codeSize < codeLen) {\n      throw new _util.FormatError('Bad encoding in flate stream');\n    }\n    this.codeBuf = codeBuf >> codeLen;\n    this.codeSize = codeSize - codeLen;\n    return codeVal;\n  };\n  FlateStream.prototype.generateHuffmanTable = function flateStreamGenerateHuffmanTable(lengths) {\n    var n = lengths.length;\n    var maxLen = 0;\n    var i;\n    for (i = 0; i < n; ++i) {\n      if (lengths[i] > maxLen) {\n        maxLen = lengths[i];\n      }\n    }\n    var size = 1 << maxLen;\n    var codes = new Int32Array(size);\n    for (var len = 1, code = 0, skip = 2; len <= maxLen; ++len, code <<= 1, skip <<= 1) {\n      for (var val = 0; val < n; ++val) {\n        if (lengths[val] === len) {\n          var code2 = 0;\n          var 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  FlateStream.prototype.readBlock = function FlateStream_readBlock() {\n    var buffer, len;\n    var str = this.str;\n    var hdr = this.getBits(3);\n    if (hdr & 1) {\n      this.eof = true;\n    }\n    hdr >>= 1;\n    if (hdr === 0) {\n      var b;\n      if ((b = str.getByte()) === -1) {\n        throw new _util.FormatError('Bad block header in flate stream');\n      }\n      var blockLen = b;\n      if ((b = str.getByte()) === -1) {\n        throw new _util.FormatError('Bad block header in flate stream');\n      }\n      blockLen |= b << 8;\n      if ((b = str.getByte()) === -1) {\n        throw new _util.FormatError('Bad block header in flate stream');\n      }\n      var check = b;\n      if ((b = str.getByte()) === -1) {\n        throw new _util.FormatError('Bad block header in flate stream');\n      }\n      check |= b << 8;\n      if (check !== (~blockLen & 0xffff) && (blockLen !== 0 || check !== 0)) {\n        throw new _util.FormatError('Bad uncompressed block length in flate stream');\n      }\n      this.codeBuf = 0;\n      this.codeSize = 0;\n      var bufferLength = this.bufferLength;\n      buffer = this.ensureBuffer(bufferLength + blockLen);\n      var end = bufferLength + blockLen;\n      this.bufferLength = end;\n      if (blockLen === 0) {\n        if (str.peekByte() === -1) {\n          this.eof = true;\n        }\n      } else {\n        for (var n = bufferLength; n < end; ++n) {\n          if ((b = str.getByte()) === -1) {\n            this.eof = true;\n            break;\n          }\n          buffer[n] = b;\n        }\n      }\n      return;\n    }\n    var litCodeTable;\n    var distCodeTable;\n    if (hdr === 1) {\n      litCodeTable = fixedLitCodeTab;\n      distCodeTable = fixedDistCodeTab;\n    } else if (hdr === 2) {\n      var numLitCodes = this.getBits(5) + 257;\n      var numDistCodes = this.getBits(5) + 1;\n      var numCodeLenCodes = this.getBits(4) + 4;\n      var codeLenCodeLengths = new Uint8Array(codeLenCodeMap.length);\n      var i;\n      for (i = 0; i < numCodeLenCodes; ++i) {\n        codeLenCodeLengths[codeLenCodeMap[i]] = this.getBits(3);\n      }\n      var codeLenCodeTab = this.generateHuffmanTable(codeLenCodeLengths);\n      len = 0;\n      i = 0;\n      var codes = numLitCodes + numDistCodes;\n      var codeLengths = new Uint8Array(codes);\n      var bitsLength, bitsOffset, what;\n      while (i < codes) {\n        var 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        var 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 _util.FormatError('Unknown block type in flate stream');\n    }\n    buffer = this.buffer;\n    var limit = buffer ? buffer.length : 0;\n    var pos = this.bufferLength;\n    while (true) {\n      var 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      var 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      var dist = (code1 & 0xffff) + code2;\n      if (pos + len >= limit) {\n        buffer = this.ensureBuffer(pos + len);\n        limit = buffer.length;\n      }\n      for (var k = 0; k < len; ++k, ++pos) {\n        buffer[pos] = buffer[pos - dist];\n      }\n    }\n  };\n  return FlateStream;\n}();\nvar PredictorStream = function PredictorStreamClosure() {\n  function PredictorStream(str, maybeLength, params) {\n    if (!(0, _primitives.isDict)(params)) {\n      return str;\n    }\n    var 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 _util.FormatError('Unsupported predictor: ' + predictor);\n    }\n    if (predictor === 2) {\n      this.readBlock = this.readBlockTiff;\n    } else {\n      this.readBlock = this.readBlockPng;\n    }\n    this.str = str;\n    this.dict = str.dict;\n    var colors = this.colors = params.get('Colors') || 1;\n    var bits = this.bits = params.get('BitsPerComponent') || 8;\n    var columns = this.columns = params.get('Columns') || 1;\n    this.pixBytes = colors * bits + 7 >> 3;\n    this.rowBytes = columns * colors * bits + 7 >> 3;\n    DecodeStream.call(this, maybeLength);\n    return this;\n  }\n  PredictorStream.prototype = Object.create(DecodeStream.prototype);\n  PredictorStream.prototype.readBlockTiff = function predictorStreamReadBlockTiff() {\n    var rowBytes = this.rowBytes;\n    var bufferLength = this.bufferLength;\n    var buffer = this.ensureBuffer(bufferLength + rowBytes);\n    var bits = this.bits;\n    var colors = this.colors;\n    var rawBytes = this.str.getBytes(rowBytes);\n    this.eof = !rawBytes.length;\n    if (this.eof) {\n      return;\n    }\n    var inbuf = 0,\n        outbuf = 0;\n    var inbits = 0,\n        outbits = 0;\n    var pos = bufferLength;\n    var i;\n    if (bits === 1 && colors === 1) {\n      for (i = 0; i < rowBytes; ++i) {\n        var 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      var bytesPerPixel = colors * 2;\n      for (i = 0; i < bytesPerPixel; ++i) {\n        buffer[pos++] = rawBytes[i];\n      }\n      for (; i < rowBytes; i += 2) {\n        var 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      var compArray = new Uint8Array(colors + 1);\n      var bitMask = (1 << bits) - 1;\n      var j = 0,\n          k = bufferLength;\n      var columns = this.columns;\n      for (i = 0; i < columns; ++i) {\n        for (var 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  PredictorStream.prototype.readBlockPng = function predictorStreamReadBlockPng() {\n    var rowBytes = this.rowBytes;\n    var pixBytes = this.pixBytes;\n    var predictor = this.str.getByte();\n    var rawBytes = this.str.getBytes(rowBytes);\n    this.eof = !rawBytes.length;\n    if (this.eof) {\n      return;\n    }\n    var bufferLength = this.bufferLength;\n    var buffer = this.ensureBuffer(bufferLength + rowBytes);\n    var prevRow = buffer.subarray(bufferLength - rowBytes, bufferLength);\n    if (prevRow.length === 0) {\n      prevRow = new Uint8Array(rowBytes);\n    }\n    var 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          var upLeft = prevRow[i - pixBytes];\n          var left = buffer[j - pixBytes];\n          var p = left + up - upLeft;\n          var pa = p - left;\n          if (pa < 0) {\n            pa = -pa;\n          }\n          var pb = p - up;\n          if (pb < 0) {\n            pb = -pb;\n          }\n          var 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 _util.FormatError('Unsupported predictor: ' + predictor);\n    }\n    this.bufferLength += rowBytes;\n  };\n  return PredictorStream;\n}();\nvar DecryptStream = function DecryptStreamClosure() {\n  function DecryptStream(str, maybeLength, decrypt) {\n    this.str = str;\n    this.dict = str.dict;\n    this.decrypt = decrypt;\n    this.nextChunk = null;\n    this.initialized = false;\n    DecodeStream.call(this, maybeLength);\n  }\n  var chunkSize = 512;\n  DecryptStream.prototype = Object.create(DecodeStream.prototype);\n  DecryptStream.prototype.readBlock = function DecryptStream_readBlock() {\n    var 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    var hasMoreData = this.nextChunk && this.nextChunk.length > 0;\n    var decrypt = this.decrypt;\n    chunk = decrypt(chunk, !hasMoreData);\n    var bufferLength = this.bufferLength;\n    var i,\n        n = chunk.length;\n    var buffer = this.ensureBuffer(bufferLength + n);\n    for (i = 0; i < n; i++) {\n      buffer[bufferLength++] = chunk[i];\n    }\n    this.bufferLength = bufferLength;\n  };\n  return DecryptStream;\n}();\nvar Ascii85Stream = function Ascii85StreamClosure() {\n  function Ascii85Stream(str, maybeLength) {\n    this.str = str;\n    this.dict = str.dict;\n    this.input = new Uint8Array(5);\n    if (maybeLength) {\n      maybeLength = 0.8 * maybeLength;\n    }\n    DecodeStream.call(this, maybeLength);\n  }\n  Ascii85Stream.prototype = Object.create(DecodeStream.prototype);\n  Ascii85Stream.prototype.readBlock = function Ascii85Stream_readBlock() {\n    var TILDA_CHAR = 0x7E;\n    var Z_LOWER_CHAR = 0x7A;\n    var EOF = -1;\n    var str = this.str;\n    var c = str.getByte();\n    while ((0, _util.isSpace)(c)) {\n      c = str.getByte();\n    }\n    if (c === EOF || c === TILDA_CHAR) {\n      this.eof = true;\n      return;\n    }\n    var bufferLength = this.bufferLength,\n        buffer;\n    var 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      var input = this.input;\n      input[0] = c;\n      for (i = 1; i < 5; ++i) {\n        c = str.getByte();\n        while ((0, _util.isSpace)(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      var 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  return Ascii85Stream;\n}();\nvar AsciiHexStream = function AsciiHexStreamClosure() {\n  function AsciiHexStream(str, maybeLength) {\n    this.str = str;\n    this.dict = str.dict;\n    this.firstDigit = -1;\n    if (maybeLength) {\n      maybeLength = 0.5 * maybeLength;\n    }\n    DecodeStream.call(this, maybeLength);\n  }\n  AsciiHexStream.prototype = Object.create(DecodeStream.prototype);\n  AsciiHexStream.prototype.readBlock = function AsciiHexStream_readBlock() {\n    var UPSTREAM_BLOCK_SIZE = 8000;\n    var bytes = this.str.getBytes(UPSTREAM_BLOCK_SIZE);\n    if (!bytes.length) {\n      this.eof = true;\n      return;\n    }\n    var maxDecodeLength = bytes.length + 1 >> 1;\n    var buffer = this.ensureBuffer(this.bufferLength + maxDecodeLength);\n    var bufferLength = this.bufferLength;\n    var firstDigit = this.firstDigit;\n    for (var i = 0, ii = bytes.length; i < ii; i++) {\n      var ch = bytes[i],\n          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  return AsciiHexStream;\n}();\nvar RunLengthStream = function RunLengthStreamClosure() {\n  function RunLengthStream(str, maybeLength) {\n    this.str = str;\n    this.dict = str.dict;\n    DecodeStream.call(this, maybeLength);\n  }\n  RunLengthStream.prototype = Object.create(DecodeStream.prototype);\n  RunLengthStream.prototype.readBlock = function RunLengthStream_readBlock() {\n    var repeatHeader = this.str.getBytes(2);\n    if (!repeatHeader || repeatHeader.length < 2 || repeatHeader[0] === 128) {\n      this.eof = true;\n      return;\n    }\n    var buffer;\n    var bufferLength = this.bufferLength;\n    var n = repeatHeader[0];\n    if (n < 128) {\n      buffer = this.ensureBuffer(bufferLength + n + 1);\n      buffer[bufferLength++] = repeatHeader[1];\n      if (n > 0) {\n        var source = this.str.getBytes(n);\n        buffer.set(source, bufferLength);\n        bufferLength += n;\n      }\n    } else {\n      n = 257 - n;\n      var b = repeatHeader[1];\n      buffer = this.ensureBuffer(bufferLength + n + 1);\n      for (var i = 0; i < n; i++) {\n        buffer[bufferLength++] = b;\n      }\n    }\n    this.bufferLength = bufferLength;\n  };\n  return RunLengthStream;\n}();\nvar LZWStream = function LZWStreamClosure() {\n  function LZWStream(str, maybeLength, earlyChange) {\n    this.str = str;\n    this.dict = str.dict;\n    this.cachedData = 0;\n    this.bitsCached = 0;\n    var maxLzwDictionarySize = 4096;\n    var lzwState = {\n      earlyChange: 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 (var i = 0; i < 256; ++i) {\n      lzwState.dictionaryValues[i] = i;\n      lzwState.dictionaryLengths[i] = 1;\n    }\n    this.lzwState = lzwState;\n    DecodeStream.call(this, maybeLength);\n  }\n  LZWStream.prototype = Object.create(DecodeStream.prototype);\n  LZWStream.prototype.readBits = function LZWStream_readBits(n) {\n    var bitsCached = this.bitsCached;\n    var cachedData = this.cachedData;\n    while (bitsCached < n) {\n      var 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  LZWStream.prototype.readBlock = function LZWStream_readBlock() {\n    var blockSize = 512;\n    var estimatedDecodedSize = blockSize * 2,\n        decodedSizeDelta = blockSize;\n    var i, j, q;\n    var lzwState = this.lzwState;\n    if (!lzwState) {\n      return;\n    }\n    var earlyChange = lzwState.earlyChange;\n    var nextCode = lzwState.nextCode;\n    var dictionaryValues = lzwState.dictionaryValues;\n    var dictionaryLengths = lzwState.dictionaryLengths;\n    var dictionaryPrevCodes = lzwState.dictionaryPrevCodes;\n    var codeLength = lzwState.codeLength;\n    var prevCode = lzwState.prevCode;\n    var currentSequence = lzwState.currentSequence;\n    var currentSequenceLength = lzwState.currentSequenceLength;\n    var decodedLength = 0;\n    var currentBufferLength = this.bufferLength;\n    var buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize);\n    for (i = 0; i < blockSize; i++) {\n      var code = this.readBits(codeLength);\n      var 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  return LZWStream;\n}();\nvar NullStream = function NullStreamClosure() {\n  function NullStream() {\n    Stream.call(this, new Uint8Array(0));\n  }\n  NullStream.prototype = Stream.prototype;\n  return NullStream;\n}();\nexports.Ascii85Stream = Ascii85Stream;\nexports.AsciiHexStream = AsciiHexStream;\nexports.DecryptStream = DecryptStream;\nexports.DecodeStream = DecodeStream;\nexports.FlateStream = FlateStream;\nexports.NullStream = NullStream;\nexports.PredictorStream = PredictorStream;\nexports.RunLengthStream = RunLengthStream;\nexports.Stream = Stream;\nexports.StreamsSequenceStream = StreamsSequenceStream;\nexports.StringStream = StringStream;\nexports.LZWStream = LZWStream;\n\n/***/ }),\n/* 126 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CCITTFaxStream = undefined;\n\nvar _primitives = __w_pdfjs_require__(123);\n\nvar _ccitt = __w_pdfjs_require__(127);\n\nvar _stream = __w_pdfjs_require__(125);\n\nvar CCITTFaxStream = function CCITTFaxStreamClosure() {\n  function CCITTFaxStream(str, maybeLength, params) {\n    this.str = str;\n    this.dict = str.dict;\n    if (!(0, _primitives.isDict)(params)) {\n      params = _primitives.Dict.empty;\n    }\n    var source = {\n      next: function next() {\n        return str.getByte();\n      }\n    };\n    this.ccittFaxDecoder = new _ccitt.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    _stream.DecodeStream.call(this, maybeLength);\n  }\n  CCITTFaxStream.prototype = Object.create(_stream.DecodeStream.prototype);\n  CCITTFaxStream.prototype.readBlock = function () {\n    while (!this.eof) {\n      var 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  return CCITTFaxStream;\n}();\nexports.CCITTFaxStream = CCITTFaxStream;\n\n/***/ }),\n/* 127 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CCITTFaxDecoder = undefined;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar CCITTFaxDecoder = function CCITTFaxDecoder() {\n  var ccittEOL = -2;\n  var ccittEOF = -1;\n  var twoDimPass = 0;\n  var twoDimHoriz = 1;\n  var twoDimVert0 = 2;\n  var twoDimVertR1 = 3;\n  var twoDimVertL1 = 4;\n  var twoDimVertR2 = 5;\n  var twoDimVertL2 = 6;\n  var twoDimVertR3 = 7;\n  var twoDimVertL3 = 8;\n  var 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]];\n  var 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]];\n  var 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]];\n  var 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]];\n  var 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]];\n  var 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]];\n  function CCITTFaxDecoder(source) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\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    var eoblock = options['EndOfBlock'];\n    if (eoblock === null || eoblock === undefined) {\n      eoblock = true;\n    }\n    this.eoblock = eoblock;\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    var code1 = void 0;\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  CCITTFaxDecoder.prototype = {\n    readNextChar: function readNextChar() {\n      if (this.eof) {\n        return -1;\n      }\n      var refLine = this.refLine;\n      var codingLine = this.codingLine;\n      var columns = this.columns;\n      var refPos = void 0,\n          blackPixels = void 0,\n          bits = void 0,\n          i = void 0;\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        var code1 = void 0,\n            code2 = void 0,\n            code3 = void 0;\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                (0, _util.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        var 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                  (0, _util.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        if (codingLine[0] > 0) {\n          this.outputBits = codingLine[this.codingPos = 0];\n        } else {\n          this.outputBits = codingLine[this.codingPos = 1];\n        }\n        this.row++;\n      }\n      var c = void 0;\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 (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: function _addPixels(a1, blackPixels) {\n      var codingLine = this.codingLine;\n      var codingPos = this.codingPos;\n      if (a1 > codingLine[codingPos]) {\n        if (a1 > this.columns) {\n          (0, _util.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: function _addPixelsNeg(a1, blackPixels) {\n      var codingLine = this.codingLine;\n      var codingPos = this.codingPos;\n      if (a1 > codingLine[codingPos]) {\n        if (a1 > this.columns) {\n          (0, _util.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          (0, _util.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: function _findTableCode(start, end, table, limit) {\n      var limitValue = limit || 0;\n      for (var i = start; i <= end; ++i) {\n        var 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          var 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: function _getTwoDimCode() {\n      var code = 0;\n      var p = void 0;\n      if (this.eoblock) {\n        code = this._lookBits(7);\n        p = twoDimTable[code];\n        if (p && p[0] > 0) {\n          this._eatBits(p[0]);\n          return p[1];\n        }\n      } else {\n        var result = this._findTableCode(1, 7, twoDimTable);\n        if (result[0] && result[2]) {\n          return result[1];\n        }\n      }\n      (0, _util.info)('Bad two dim code');\n      return ccittEOF;\n    },\n    _getWhiteCode: function _getWhiteCode() {\n      var code = 0;\n      var p = void 0;\n      if (this.eoblock) {\n        code = this._lookBits(12);\n        if (code === ccittEOF) {\n          return 1;\n        }\n        if (code >> 5 === 0) {\n          p = whiteTable1[code];\n        } else {\n          p = whiteTable2[code >> 3];\n        }\n        if (p[0] > 0) {\n          this._eatBits(p[0]);\n          return p[1];\n        }\n      } else {\n        var 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      (0, _util.info)('bad white code');\n      this._eatBits(1);\n      return 1;\n    },\n    _getBlackCode: function _getBlackCode() {\n      var code = void 0,\n          p = void 0;\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        var 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      (0, _util.info)('bad black code');\n      this._eatBits(1);\n      return 1;\n    },\n    _lookBits: function _lookBits(n) {\n      var c = void 0;\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: function _eatBits(n) {\n      if ((this.inputBits -= n) < 0) {\n        this.inputBits = 0;\n      }\n    }\n  };\n  return CCITTFaxDecoder;\n}();\nexports.CCITTFaxDecoder = CCITTFaxDecoder;\n\n/***/ }),\n/* 128 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Jbig2Stream = undefined;\n\nvar _primitives = __w_pdfjs_require__(123);\n\nvar _stream = __w_pdfjs_require__(125);\n\nvar _jbig = __w_pdfjs_require__(129);\n\nvar _util = __w_pdfjs_require__(2);\n\nvar Jbig2Stream = function Jbig2StreamClosure() {\n  function Jbig2Stream(stream, maybeLength, dict, params) {\n    this.stream = stream;\n    this.maybeLength = maybeLength;\n    this.dict = dict;\n    this.params = params;\n    _stream.DecodeStream.call(this, maybeLength);\n  }\n  Jbig2Stream.prototype = Object.create(_stream.DecodeStream.prototype);\n  Object.defineProperty(Jbig2Stream.prototype, 'bytes', {\n    get: function get() {\n      return (0, _util.shadow)(this, 'bytes', this.stream.getBytes(this.maybeLength));\n    },\n\n    configurable: true\n  });\n  Jbig2Stream.prototype.ensureBuffer = function (requested) {};\n  Jbig2Stream.prototype.readBlock = function () {\n    if (this.eof) {\n      return;\n    }\n    var jbig2Image = new _jbig.Jbig2Image();\n    var chunks = [];\n    if ((0, _primitives.isDict)(this.params)) {\n      var globalsStream = this.params.get('JBIG2Globals');\n      if ((0, _primitives.isStream)(globalsStream)) {\n        var 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    var data = jbig2Image.parseChunks(chunks);\n    var dataLength = data.length;\n    for (var i = 0; i < dataLength; i++) {\n      data[i] ^= 0xFF;\n    }\n    this.buffer = data;\n    this.bufferLength = dataLength;\n    this.eof = true;\n  };\n  return Jbig2Stream;\n}();\nexports.Jbig2Stream = Jbig2Stream;\n\n/***/ }),\n/* 129 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Jbig2Image = undefined;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _arithmetic_decoder = __w_pdfjs_require__(130);\n\nvar _ccitt = __w_pdfjs_require__(127);\n\nvar Jbig2Error = function Jbig2ErrorClosure() {\n  function Jbig2Error(msg) {\n    this.message = 'JBIG2 error: ' + msg;\n  }\n  Jbig2Error.prototype = new Error();\n  Jbig2Error.prototype.name = 'Jbig2Error';\n  Jbig2Error.constructor = Jbig2Error;\n  return Jbig2Error;\n}();\nvar Jbig2Image = function Jbig2ImageClosure() {\n  function ContextCache() {}\n  ContextCache.prototype = {\n    getContexts: function getContexts(id) {\n      if (id in this) {\n        return this[id];\n      }\n      return this[id] = new Int8Array(1 << 16);\n    }\n  };\n  function DecodingContext(data, start, end) {\n    this.data = data;\n    this.start = start;\n    this.end = end;\n  }\n  DecodingContext.prototype = {\n    get decoder() {\n      var decoder = new _arithmetic_decoder.ArithmeticDecoder(this.data, this.start, this.end);\n      return (0, _util.shadow)(this, 'decoder', decoder);\n    },\n    get contextCache() {\n      var cache = new ContextCache();\n      return (0, _util.shadow)(this, 'contextCache', cache);\n    }\n  };\n  function decodeInteger(contextCache, procedure, decoder) {\n    var contexts = contextCache.getContexts(procedure);\n    var prev = 1;\n    function readBits(length) {\n      var v = 0;\n      for (var i = 0; i < length; i++) {\n        var 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    var sign = readBits(1);\n    var 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    return sign === 0 ? value : value > 0 ? -value : null;\n  }\n  function decodeIAID(contextCache, decoder, codeLength) {\n    var contexts = contextCache.getContexts('IAID');\n    var prev = 1;\n    for (var i = 0; i < codeLength; i++) {\n      var 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  }\n  var 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'];\n  var 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  }]];\n  var 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  }];\n  var ReusedContexts = [0x9B25, 0x0795, 0x00E5, 0x0195];\n  var RefinementReusedContexts = [0x0020, 0x0008];\n  function decodeBitmapTemplate0(width, height, decodingContext) {\n    var decoder = decodingContext.decoder;\n    var contexts = decodingContext.contextCache.getContexts('GB');\n    var contextLabel,\n        i,\n        j,\n        pixel,\n        row,\n        row1,\n        row2,\n        bitmap = [];\n    var 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  }\n  function decodeBitmap(mmr, width, height, templateIndex, prediction, skip, at, decodingContext) {\n    if (mmr) {\n      var 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    var useskip = !!skip;\n    var template = CodingTemplates[templateIndex].concat(at);\n    template.sort(function (a, b) {\n      return a.y - b.y || a.x - b.x;\n    });\n    var templateLength = template.length;\n    var templateX = new Int8Array(templateLength);\n    var templateY = new Int8Array(templateLength);\n    var changingTemplateEntries = [];\n    var reuseMask = 0,\n        minX = 0,\n        maxX = 0,\n        minY = 0;\n    var 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    var changingEntriesLength = changingTemplateEntries.length;\n    var changingTemplateX = new Int8Array(changingEntriesLength);\n    var changingTemplateY = new Int8Array(changingEntriesLength);\n    var 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    var sbb_left = -minX;\n    var sbb_top = -minY;\n    var sbb_right = width - maxX;\n    var pseudoPixelContext = ReusedContexts[templateIndex];\n    var row = new Uint8Array(width);\n    var bitmap = [];\n    var decoder = decodingContext.decoder;\n    var contexts = decodingContext.contextCache.getContexts('GB');\n    var ltp = 0,\n        j,\n        i0,\n        j0,\n        contextLabel = 0,\n        bit,\n        shift;\n    for (var i = 0; i < height; i++) {\n      if (prediction) {\n        var 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        var pixel = decoder.readBit(contexts, contextLabel);\n        row[j] = pixel;\n      }\n    }\n    return bitmap;\n  }\n  function decodeRefinement(width, height, templateIndex, referenceBitmap, offsetX, offsetY, prediction, at, decodingContext) {\n    var codingTemplate = RefinementTemplates[templateIndex].coding;\n    if (templateIndex === 0) {\n      codingTemplate = codingTemplate.concat([at[0]]);\n    }\n    var codingTemplateLength = codingTemplate.length;\n    var codingTemplateX = new Int32Array(codingTemplateLength);\n    var codingTemplateY = new Int32Array(codingTemplateLength);\n    var k;\n    for (k = 0; k < codingTemplateLength; k++) {\n      codingTemplateX[k] = codingTemplate[k].x;\n      codingTemplateY[k] = codingTemplate[k].y;\n    }\n    var referenceTemplate = RefinementTemplates[templateIndex].reference;\n    if (templateIndex === 0) {\n      referenceTemplate = referenceTemplate.concat([at[1]]);\n    }\n    var referenceTemplateLength = referenceTemplate.length;\n    var referenceTemplateX = new Int32Array(referenceTemplateLength);\n    var 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    var referenceWidth = referenceBitmap[0].length;\n    var referenceHeight = referenceBitmap.length;\n    var pseudoPixelContext = RefinementReusedContexts[templateIndex];\n    var bitmap = [];\n    var decoder = decodingContext.decoder;\n    var contexts = decodingContext.contextCache.getContexts('GR');\n    var ltp = 0;\n    for (var i = 0; i < height; i++) {\n      if (prediction) {\n        var sltp = decoder.readBit(contexts, pseudoPixelContext);\n        ltp ^= sltp;\n        if (ltp) {\n          throw new Jbig2Error('prediction is not supported');\n        }\n      }\n      var row = new Uint8Array(width);\n      bitmap.push(row);\n      for (var j = 0; j < width; j++) {\n        var i0, j0;\n        var 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        var pixel = decoder.readBit(contexts, contextLabel);\n        row[j] = pixel;\n      }\n    }\n    return bitmap;\n  }\n  function 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    var newSymbols = [];\n    var currentHeight = 0;\n    var symbolCodeLength = (0, _util.log2)(symbols.length + numberOfNewSymbols);\n    var decoder = decodingContext.decoder;\n    var contextCache = decodingContext.contextCache;\n    var tableB1 = void 0,\n        symbolWidths = void 0;\n    if (huffman) {\n      tableB1 = getStandardTable(1);\n      symbolWidths = [];\n      symbolCodeLength = Math.max(symbolCodeLength, 1);\n    }\n    while (newSymbols.length < numberOfNewSymbols) {\n      var deltaHeight = huffman ? huffmanTables.tableDeltaHeight.decode(huffmanInput) : decodeInteger(contextCache, 'IADH', decoder);\n      currentHeight += deltaHeight;\n      var currentWidth = 0,\n          totalWidth = 0;\n      var firstSymbol = huffman ? symbolWidths.length : 0;\n      while (true) {\n        var deltaWidth = huffman ? huffmanTables.tableDeltaWidth.decode(huffmanInput) : decodeInteger(contextCache, 'IADW', decoder);\n        if (deltaWidth === null) {\n          break;\n        }\n        currentWidth += deltaWidth;\n        totalWidth += currentWidth;\n        var bitmap;\n        if (refinement) {\n          var 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            var symbolId = decodeIAID(contextCache, decoder, symbolCodeLength);\n            var rdx = decodeInteger(contextCache, 'IARDX', decoder);\n            var rdy = decodeInteger(contextCache, 'IARDY', decoder);\n            var 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        var bitmapSize = huffmanTables.tableBitmapSize.decode(huffmanInput);\n        huffmanInput.byteAlign();\n        var collectiveBitmap = void 0;\n        if (bitmapSize === 0) {\n          collectiveBitmap = readUncompressedBitmap(huffmanInput, totalWidth, currentHeight);\n        } else {\n          var originalEnd = huffmanInput.end;\n          var 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        var numberOfSymbolsDecoded = symbolWidths.length;\n        if (firstSymbol === numberOfSymbolsDecoded - 1) {\n          newSymbols.push(collectiveBitmap);\n        } else {\n          var _i = void 0,\n              y = void 0,\n              xMin = 0,\n              xMax = void 0,\n              bitmapWidth = void 0,\n              symbolBitmap = void 0;\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    var exportedSymbols = [];\n    var flags = [],\n        currentFlag = false;\n    var totalSymbolsLength = symbols.length + numberOfNewSymbols;\n    while (flags.length < totalSymbolsLength) {\n      var runLength = huffman ? tableB1.decode(huffmanInput) : decodeInteger(contextCache, 'IAEX', decoder);\n      while (runLength--) {\n        flags.push(currentFlag);\n      }\n      currentFlag = !currentFlag;\n    }\n    for (var i = 0, ii = symbols.length; i < ii; i++) {\n      if (flags[i]) {\n        exportedSymbols.push(symbols[i]);\n      }\n    }\n    for (var j = 0; j < numberOfNewSymbols; i++, j++) {\n      if (flags[i]) {\n        exportedSymbols.push(newSymbols[j]);\n      }\n    }\n    return exportedSymbols;\n  }\n  function 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    var bitmap = [];\n    var i, row;\n    for (i = 0; i < height; i++) {\n      row = new Uint8Array(width);\n      if (defaultPixelValue) {\n        for (var j = 0; j < width; j++) {\n          row[j] = defaultPixelValue;\n        }\n      }\n      bitmap.push(row);\n    }\n    var decoder = decodingContext.decoder;\n    var contextCache = decodingContext.contextCache;\n    var stripT = huffman ? -huffmanTables.tableDeltaT.decode(huffmanInput) : -decodeInteger(contextCache, 'IADT', decoder);\n    var firstS = 0;\n    i = 0;\n    while (i < numberOfSymbolInstances) {\n      var deltaT = huffman ? huffmanTables.tableDeltaT.decode(huffmanInput) : decodeInteger(contextCache, 'IADT', decoder);\n      stripT += deltaT;\n      var deltaFirstS = huffman ? huffmanTables.tableFirstS.decode(huffmanInput) : decodeInteger(contextCache, 'IAFS', decoder);\n      firstS += deltaFirstS;\n      var currentS = firstS;\n      do {\n        var currentT = 0;\n        if (stripSize > 1) {\n          currentT = huffman ? huffmanInput.readBits(logStripSize) : decodeInteger(contextCache, 'IAIT', decoder);\n        }\n        var t = stripSize * stripT + currentT;\n        var symbolId = huffman ? huffmanTables.symbolIDTable.decode(huffmanInput) : decodeIAID(contextCache, decoder, symbolCodeLength);\n        var applyRefinement = refinement && (huffman ? huffmanInput.readBit() : decodeInteger(contextCache, 'IARI', decoder));\n        var symbolBitmap = inputSymbols[symbolId];\n        var symbolWidth = symbolBitmap[0].length;\n        var symbolHeight = symbolBitmap.length;\n        if (applyRefinement) {\n          var rdw = decodeInteger(contextCache, 'IARDW', decoder);\n          var rdh = decodeInteger(contextCache, 'IARDH', decoder);\n          var rdx = decodeInteger(contextCache, 'IARDX', decoder);\n          var 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        var offsetT = t - (referenceCorner & 1 ? 0 : symbolHeight - 1);\n        var offsetS = currentS - (referenceCorner & 2 ? symbolWidth - 1 : 0);\n        var 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            var 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          currentS += symbolHeight - 1;\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          currentS += symbolWidth - 1;\n        }\n        i++;\n        var deltaS = huffman ? huffmanTables.tableDeltaS.decode(huffmanInput) : decodeInteger(contextCache, 'IADS', decoder);\n        if (deltaS === null) {\n          break;\n        }\n        currentS += deltaS + dsOffset;\n      } while (true);\n    }\n    return bitmap;\n  }\n  function decodePatternDictionary(mmr, patternWidth, patternHeight, maxPatternIndex, template, decodingContext) {\n    var 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        at.push({\n          x: 2,\n          y: -2\n        });\n        at.push({\n          x: -2,\n          y: -2\n        });\n      }\n    }\n    var collectiveWidth = (maxPatternIndex + 1) * patternWidth;\n    var collectiveBitmap = decodeBitmap(mmr, collectiveWidth, patternHeight, template, false, null, at, decodingContext);\n    var patterns = [],\n        i = 0,\n        patternBitmap = void 0,\n        xMin = void 0,\n        xMax = void 0,\n        y = void 0;\n    while (i <= maxPatternIndex) {\n      patternBitmap = [];\n      xMin = patternWidth * i;\n      xMax = xMin + patternWidth;\n      for (y = 0; y < patternHeight; y++) {\n        patternBitmap.push(collectiveBitmap[y].subarray(xMin, xMax));\n      }\n      patterns.push(patternBitmap);\n      i++;\n    }\n    return patterns;\n  }\n  function decodeHalftoneRegion(mmr, patterns, template, regionWidth, regionHeight, defaultPixelValue, enableSkip, combinationOperator, gridWidth, gridHeight, gridOffsetX, gridOffsetY, gridVectorX, gridVectorY, decodingContext) {\n    var 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    var regionBitmap = [];\n    var i = void 0,\n        j = void 0,\n        row = void 0;\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    var numberOfPatterns = patterns.length;\n    var pattern0 = patterns[0];\n    var patternWidth = pattern0[0].length,\n        patternHeight = pattern0.length;\n    var bitsPerValue = (0, _util.log2)(numberOfPatterns);\n    var 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        at.push({\n          x: 2,\n          y: -2\n        });\n        at.push({\n          x: -2,\n          y: -2\n        });\n      }\n    }\n    var grayScaleBitPlanes = [],\n        mmrInput = void 0,\n        bitmap = void 0;\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    var mg = void 0,\n        ng = void 0,\n        bit = void 0,\n        patternIndex = void 0,\n        patternBitmap = void 0,\n        x = void 0,\n        y = void 0,\n        patternRow = void 0,\n        regionRow = void 0;\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] ^ bit;\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          var regionX = void 0,\n              regionY = void 0;\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  }\n  function readSegmentHeader(data, start) {\n    var segmentHeader = {};\n    segmentHeader.number = (0, _util.readUint32)(data, start);\n    var flags = data[start + 4];\n    var 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    var pageAssociationFieldSize = !!(flags & 0x40);\n    var referredFlags = data[start + 5];\n    var referredToCount = referredFlags >> 5 & 7;\n    var retainBits = [referredFlags & 31];\n    var position = start + 6;\n    if (referredFlags === 7) {\n      referredToCount = (0, _util.readUint32)(data, position - 1) & 0x1FFFFFFF;\n      position += 3;\n      var 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    var referredToSegmentNumberSize = segmentHeader.number <= 256 ? 1 : segmentHeader.number <= 65536 ? 2 : 4;\n    var referredTo = [];\n    var i, ii;\n    for (i = 0; i < referredToCount; i++) {\n      var number = referredToSegmentNumberSize === 1 ? data[position] : referredToSegmentNumberSize === 2 ? (0, _util.readUint16)(data, position) : (0, _util.readUint32)(data, position);\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 = (0, _util.readUint32)(data, position);\n      position += 4;\n    }\n    segmentHeader.length = (0, _util.readUint32)(data, position);\n    position += 4;\n    if (segmentHeader.length === 0xFFFFFFFF) {\n      if (segmentType === 38) {\n        var genericRegionInfo = readRegionSegmentInformation(data, position);\n        var genericRegionSegmentFlags = data[position + RegionSegmentInformationFieldLength];\n        var genericRegionMmr = !!(genericRegionSegmentFlags & 1);\n        var searchPatternLength = 6;\n        var 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          var 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  }\n  function readSegments(header, data, start, end) {\n    var segments = [];\n    var position = start;\n    while (position < end) {\n      var segmentHeader = readSegmentHeader(data, position);\n      position = segmentHeader.headerEnd;\n      var segment = {\n        header: segmentHeader,\n        data: 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 (var 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  }\n  function readRegionSegmentInformation(data, start) {\n    return {\n      width: (0, _util.readUint32)(data, start),\n      height: (0, _util.readUint32)(data, start + 4),\n      x: (0, _util.readUint32)(data, start + 8),\n      y: (0, _util.readUint32)(data, start + 12),\n      combinationOperator: data[start + 16] & 7\n    };\n  }\n  var RegionSegmentInformationFieldLength = 17;\n  function processSegment(segment, visitor) {\n    var header = segment.header;\n    var data = segment.data,\n        position = segment.start,\n        end = segment.end;\n    var args, at, i, atLength;\n    switch (header.type) {\n      case 0:\n        var dictionary = {};\n        var dictionaryFlags = (0, _util.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: (0, _util.readInt8)(data, position),\n              y: (0, _util.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: (0, _util.readInt8)(data, position),\n              y: (0, _util.readInt8)(data, position + 1)\n            });\n            position += 2;\n          }\n          dictionary.refinementAt = at;\n        }\n        dictionary.numberOfExportedSymbols = (0, _util.readUint32)(data, position);\n        position += 4;\n        dictionary.numberOfNewSymbols = (0, _util.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        var textRegion = {};\n        textRegion.info = readRegionSegmentInformation(data, position);\n        position += RegionSegmentInformationFieldLength;\n        var textRegionSegmentFlags = (0, _util.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          var textRegionHuffmanFlags = (0, _util.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: (0, _util.readInt8)(data, position),\n              y: (0, _util.readInt8)(data, position + 1)\n            });\n            position += 2;\n          }\n          textRegion.refinementAt = at;\n        }\n        textRegion.numberOfSymbolInstances = (0, _util.readUint32)(data, position);\n        position += 4;\n        args = [textRegion, header.referredTo, data, position, end];\n        break;\n      case 16:\n        var patternDictionary = {};\n        var 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 = (0, _util.readUint32)(data, position);\n        position += 4;\n        args = [patternDictionary, header.number, data, position, end];\n        break;\n      case 22:\n      case 23:\n        var halftoneRegion = {};\n        halftoneRegion.info = readRegionSegmentInformation(data, position);\n        position += RegionSegmentInformationFieldLength;\n        var 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 = (0, _util.readUint32)(data, position);\n        position += 4;\n        halftoneRegion.gridHeight = (0, _util.readUint32)(data, position);\n        position += 4;\n        halftoneRegion.gridOffsetX = (0, _util.readUint32)(data, position) & 0xFFFFFFFF;\n        position += 4;\n        halftoneRegion.gridOffsetY = (0, _util.readUint32)(data, position) & 0xFFFFFFFF;\n        position += 4;\n        halftoneRegion.gridVectorX = (0, _util.readUint16)(data, position);\n        position += 2;\n        halftoneRegion.gridVectorY = (0, _util.readUint16)(data, position);\n        position += 2;\n        args = [halftoneRegion, header.referredTo, data, position, end];\n        break;\n      case 38:\n      case 39:\n        var genericRegion = {};\n        genericRegion.info = readRegionSegmentInformation(data, position);\n        position += RegionSegmentInformationFieldLength;\n        var 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: (0, _util.readInt8)(data, position),\n              y: (0, _util.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        var pageInfo = {\n          width: (0, _util.readUint32)(data, position),\n          height: (0, _util.readUint32)(data, position + 4),\n          resolutionX: (0, _util.readUint32)(data, position + 8),\n          resolutionY: (0, _util.readUint32)(data, position + 12)\n        };\n        if (pageInfo.height === 0xFFFFFFFF) {\n          delete pageInfo.height;\n        }\n        var pageSegmentFlags = data[position + 16];\n        (0, _util.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    var callbackName = 'on' + header.typeName;\n    if (callbackName in visitor) {\n      visitor[callbackName].apply(visitor, args);\n    }\n  }\n  function processSegments(segments, visitor) {\n    for (var i = 0, ii = segments.length; i < ii; i++) {\n      processSegment(segments[i], visitor);\n    }\n  }\n  function parseJbig2Chunks(chunks) {\n    var visitor = new SimpleSegmentVisitor();\n    for (var i = 0, ii = chunks.length; i < ii; i++) {\n      var chunk = chunks[i];\n      var segments = readSegments({}, chunk.data, chunk.start, chunk.end);\n      processSegments(segments, visitor);\n    }\n    return visitor.buffer;\n  }\n  function parseJbig2(data) {\n    var position = 0,\n        end = data.length;\n    if (data[position] !== 0x97 || data[position + 1] !== 0x4A || data[position + 2] !== 0x42 || data[position + 3] !== 0x32 || data[position + 4] !== 0x0D || data[position + 5] !== 0x0A || data[position + 6] !== 0x1A || data[position + 7] !== 0x0A) {\n      throw new Jbig2Error('parseJbig2 - invalid header.');\n    }\n    var header = Object.create(null);\n    position += 8;\n    var flags = data[position++];\n    header.randomAccess = !(flags & 1);\n    if (!(flags & 2)) {\n      header.numberOfPages = (0, _util.readUint32)(data, position);\n      position += 4;\n    }\n    var segments = readSegments(header, data, position, end);\n    var visitor = new SimpleSegmentVisitor();\n    processSegments(segments, visitor);\n    var _visitor$currentPageI = visitor.currentPageInfo,\n        width = _visitor$currentPageI.width,\n        height = _visitor$currentPageI.height;\n\n    var bitPacked = visitor.buffer;\n    var imgData = new Uint8ClampedArray(width * height);\n    var q = 0,\n        k = 0;\n    for (var i = 0; i < height; i++) {\n      var mask = 0,\n          buffer = void 0;\n      for (var j = 0; j < width; j++) {\n        if (!mask) {\n          mask = 128;\n          buffer = bitPacked[k++];\n        }\n        imgData[q++] = buffer & mask ? 0 : 255;\n        mask >>= 1;\n      }\n    }\n    return {\n      imgData: imgData,\n      width: width,\n      height: height\n    };\n  }\n  function SimpleSegmentVisitor() {}\n  SimpleSegmentVisitor.prototype = {\n    onPageInformation: function SimpleSegmentVisitor_onPageInformation(info) {\n      this.currentPageInfo = info;\n      var rowSize = info.width + 7 >> 3;\n      var buffer = new Uint8ClampedArray(rowSize * info.height);\n      if (info.defaultPixelValue) {\n        for (var i = 0, ii = buffer.length; i < ii; i++) {\n          buffer[i] = 0xFF;\n        }\n      }\n      this.buffer = buffer;\n    },\n    drawBitmap: function SimpleSegmentVisitor_drawBitmap(regionInfo, bitmap) {\n      var pageInfo = this.currentPageInfo;\n      var width = regionInfo.width,\n          height = regionInfo.height;\n      var rowSize = pageInfo.width + 7 >> 3;\n      var combinationOperator = pageInfo.combinationOperatorOverride ? regionInfo.combinationOperator : pageInfo.combinationOperator;\n      var buffer = this.buffer;\n      var mask0 = 128 >> (regionInfo.x & 7);\n      var offset0 = regionInfo.y * rowSize + (regionInfo.x >> 3);\n      var 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: function SimpleSegmentVisitor_onImmediateGenericRegion(region, data, start, end) {\n      var regionInfo = region.info;\n      var decodingContext = new DecodingContext(data, start, end);\n      var bitmap = decodeBitmap(region.mmr, regionInfo.width, regionInfo.height, region.template, region.prediction, null, region.at, decodingContext);\n      this.drawBitmap(regionInfo, bitmap);\n    },\n    onImmediateLosslessGenericRegion: function SimpleSegmentVisitor_onImmediateLosslessGenericRegion() {\n      this.onImmediateGenericRegion.apply(this, arguments);\n    },\n    onSymbolDictionary: function SimpleSegmentVisitor_onSymbolDictionary(dictionary, currentSegment, referredSegments, data, start, end) {\n      var huffmanTables = void 0,\n          huffmanInput = void 0;\n      if (dictionary.huffman) {\n        huffmanTables = getSymbolDictionaryHuffmanTables(dictionary, referredSegments, this.customTables);\n        huffmanInput = new Reader(data, start, end);\n      }\n      var symbols = this.symbols;\n      if (!symbols) {\n        this.symbols = symbols = {};\n      }\n      var inputSymbols = [];\n      for (var i = 0, ii = referredSegments.length; i < ii; i++) {\n        var referredSymbols = symbols[referredSegments[i]];\n        if (referredSymbols) {\n          inputSymbols = inputSymbols.concat(referredSymbols);\n        }\n      }\n      var 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: function SimpleSegmentVisitor_onImmediateTextRegion(region, referredSegments, data, start, end) {\n      var regionInfo = region.info;\n      var huffmanTables = void 0,\n          huffmanInput = void 0;\n      var symbols = this.symbols;\n      var inputSymbols = [];\n      for (var i = 0, ii = referredSegments.length; i < ii; i++) {\n        var referredSymbols = symbols[referredSegments[i]];\n        if (referredSymbols) {\n          inputSymbols = inputSymbols.concat(referredSymbols);\n        }\n      }\n      var symbolCodeLength = (0, _util.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      var decodingContext = new DecodingContext(data, start, end);\n      var 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: function SimpleSegmentVisitor_onImmediateLosslessTextRegion() {\n      this.onImmediateTextRegion.apply(this, arguments);\n    },\n    onPatternDictionary: function onPatternDictionary(dictionary, currentSegment, data, start, end) {\n      var patterns = this.patterns;\n      if (!patterns) {\n        this.patterns = patterns = {};\n      }\n      var decodingContext = new DecodingContext(data, start, end);\n      patterns[currentSegment] = decodePatternDictionary(dictionary.mmr, dictionary.patternWidth, dictionary.patternHeight, dictionary.maxPatternIndex, dictionary.template, decodingContext);\n    },\n    onImmediateHalftoneRegion: function onImmediateHalftoneRegion(region, referredSegments, data, start, end) {\n      var patterns = this.patterns[referredSegments[0]];\n      var regionInfo = region.info;\n      var decodingContext = new DecodingContext(data, start, end);\n      var 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: function onImmediateLosslessHalftoneRegion() {\n      this.onImmediateHalftoneRegion.apply(this, arguments);\n    },\n    onTables: function onTables(currentSegment, data, start, end) {\n      var customTables = this.customTables;\n      if (!customTables) {\n        this.customTables = customTables = {};\n      }\n      customTables[currentSegment] = decodeTablesSegment(data, start, end);\n    }\n  };\n  function HuffmanLine(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  function HuffmanTreeNode(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  HuffmanTreeNode.prototype = {\n    buildTree: function buildTree(line, shift) {\n      var bit = line.prefixCode >> shift & 1;\n      if (shift <= 0) {\n        this.children[bit] = new HuffmanTreeNode(line);\n      } else {\n        var 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: function decodeNode(reader) {\n      if (this.isLeaf) {\n        if (this.isOOB) {\n          return null;\n        }\n        var htOffset = reader.readBits(this.rangeLength);\n        return this.rangeLow + (this.isLowerRange ? -htOffset : htOffset);\n      }\n      var node = this.children[reader.readBit()];\n      if (!node) {\n        throw new Jbig2Error('invalid Huffman data');\n      }\n      return node.decodeNode(reader);\n    }\n  };\n  function HuffmanTable(lines, prefixCodesDone) {\n    if (!prefixCodesDone) {\n      this.assignPrefixCodes(lines);\n    }\n    this.rootNode = new HuffmanTreeNode(null);\n    var i = void 0,\n        ii = lines.length,\n        line = void 0;\n    for (i = 0; i < ii; i++) {\n      line = lines[i];\n      if (line.prefixLength > 0) {\n        this.rootNode.buildTree(line, line.prefixLength - 1);\n      }\n    }\n  }\n  HuffmanTable.prototype = {\n    decode: function decode(reader) {\n      return this.rootNode.decodeNode(reader);\n    },\n    assignPrefixCodes: function assignPrefixCodes(lines) {\n      var linesLength = lines.length,\n          prefixLengthMax = 0,\n          i = void 0;\n      for (i = 0; i < linesLength; i++) {\n        prefixLengthMax = Math.max(prefixLengthMax, lines[i].prefixLength);\n      }\n      var histogram = new Uint32Array(prefixLengthMax + 1);\n      for (i = 0; i < linesLength; i++) {\n        histogram[lines[i].prefixLength]++;\n      }\n      var currentLength = 1,\n          firstCode = 0,\n          currentCode = void 0,\n          currentTemp = void 0,\n          line = void 0;\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  };\n  function decodeTablesSegment(data, start, end) {\n    var flags = data[start];\n    var lowestValue = (0, _util.readUint32)(data, start + 1) & 0xFFFFFFFF;\n    var highestValue = (0, _util.readUint32)(data, start + 5) & 0xFFFFFFFF;\n    var reader = new Reader(data, start + 9, end);\n    var prefixSizeBits = (flags >> 1 & 7) + 1;\n    var rangeSizeBits = (flags >> 4 & 7) + 1;\n    var lines = [];\n    var prefixLength = void 0,\n        rangeLength = void 0,\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  }\n  var standardTablesCache = {};\n  function getStandardTable(number) {\n    var table = standardTablesCache[number];\n    if (table) {\n      return table;\n    }\n    var lines = void 0;\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    var length = lines.length,\n        i = void 0;\n    for (i = 0; i < length; i++) {\n      lines[i] = new HuffmanLine(lines[i]);\n    }\n    table = new HuffmanTable(lines, true);\n    standardTablesCache[number] = table;\n    return table;\n  }\n  function Reader(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  Reader.prototype = {\n    readBit: function 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      var bit = this.currentByte >> this.shift & 1;\n      this.shift--;\n      return bit;\n    },\n    readBits: function readBits(numBits) {\n      var result = 0,\n          i = void 0;\n      for (i = numBits - 1; i >= 0; i--) {\n        result |= this.readBit() << i;\n      }\n      return result;\n    },\n    byteAlign: function byteAlign() {\n      this.shift = -1;\n    },\n    next: function next() {\n      if (this.position >= this.end) {\n        return -1;\n      }\n      return this.data[this.position++];\n    }\n  };\n  function getCustomHuffmanTable(index, referredTo, customTables) {\n    var currentIndex = 0,\n        i = void 0,\n        ii = referredTo.length,\n        table = void 0;\n    for (i = 0; i < ii; i++) {\n      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  }\n  function getTextRegionHuffmanTables(textRegion, referredTo, customTables, numberOfSymbols, reader) {\n    var codes = [],\n        i = void 0,\n        codeLength = void 0;\n    for (i = 0; i <= 34; i++) {\n      codeLength = reader.readBits(4);\n      codes.push(new HuffmanLine([i, codeLength, 0, 0]));\n    }\n    var runCodesTable = new HuffmanTable(codes, false);\n    codes.length = 0;\n    for (i = 0; i < numberOfSymbols;) {\n      codeLength = runCodesTable.decode(reader);\n      if (codeLength >= 32) {\n        var repeatedLength = void 0,\n            numberOfRepeats = void 0,\n            j = void 0;\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    var symbolIDTable = new HuffmanTable(codes, false);\n    var customIndex = 0,\n        tableFirstS = void 0,\n        tableDeltaS = void 0,\n        tableDeltaT = void 0;\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: symbolIDTable,\n      tableFirstS: tableFirstS,\n      tableDeltaS: tableDeltaS,\n      tableDeltaT: tableDeltaT\n    };\n  }\n  function getSymbolDictionaryHuffmanTables(dictionary, referredTo, customTables) {\n    var customIndex = 0,\n        tableDeltaHeight = void 0,\n        tableDeltaWidth = void 0;\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    var tableBitmapSize = void 0,\n        tableAggregateInstances = void 0;\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: tableDeltaHeight,\n      tableDeltaWidth: tableDeltaWidth,\n      tableBitmapSize: tableBitmapSize,\n      tableAggregateInstances: tableAggregateInstances\n    };\n  }\n  function readUncompressedBitmap(reader, width, height) {\n    var bitmap = [],\n        x = void 0,\n        y = void 0,\n        row = void 0;\n    for (y = 0; y < height; y++) {\n      row = new Uint8Array(width);\n      bitmap.push(row);\n      for (x = 0; x < width; x++) {\n        row[x] = reader.readBit();\n      }\n      reader.byteAlign();\n    }\n    return bitmap;\n  }\n  function decodeMMRBitmap(input, width, height, endOfBlock) {\n    var params = {\n      K: -1,\n      Columns: width,\n      Rows: height,\n      BlackIs1: true,\n      EndOfBlock: endOfBlock\n    };\n    var decoder = new _ccitt.CCITTFaxDecoder(input, params);\n    var bitmap = [],\n        x = void 0,\n        y = void 0,\n        row = void 0,\n        currentByte = void 0,\n        shift = void 0,\n        eof = false;\n    for (y = 0; y < height; y++) {\n      row = new Uint8Array(width);\n      bitmap.push(row);\n      shift = -1;\n      for (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      var lookForEOFLimit = 5;\n      for (var i = 0; i < lookForEOFLimit; i++) {\n        if (decoder.readNextChar() === -1) {\n          break;\n        }\n      }\n    }\n    return bitmap;\n  }\n  function Jbig2Image() {}\n  Jbig2Image.prototype = {\n    parseChunks: function parseChunks(chunks) {\n      return parseJbig2Chunks(chunks);\n    },\n    parse: function parse(data) {\n      var _parseJbig = parseJbig2(data),\n          imgData = _parseJbig.imgData,\n          width = _parseJbig.width,\n          height = _parseJbig.height;\n\n      this.width = width;\n      this.height = height;\n      return imgData;\n    }\n  };\n  return Jbig2Image;\n}();\nexports.Jbig2Image = Jbig2Image;\n\n/***/ }),\n/* 130 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar ArithmeticDecoder = function ArithmeticDecoderClosure() {\n  var 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  }];\n  function ArithmeticDecoder(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  ArithmeticDecoder.prototype = {\n    byteIn: function ArithmeticDecoder_byteIn() {\n      var data = this.data;\n      var bp = this.bp;\n      if (data[bp] === 0xFF) {\n        var b1 = data[bp + 1];\n        if (b1 > 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: function ArithmeticDecoder_readBit(contexts, pos) {\n      var cx_index = contexts[pos] >> 1,\n          cx_mps = contexts[pos] & 1;\n      var qeTableIcx = QeTable[cx_index];\n      var qeIcx = qeTableIcx.qe;\n      var d;\n      var 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  return ArithmeticDecoder;\n}();\nexports.ArithmeticDecoder = ArithmeticDecoder;\n\n/***/ }),\n/* 131 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.JpegStream = undefined;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _stream = __w_pdfjs_require__(125);\n\nvar _primitives = __w_pdfjs_require__(123);\n\nvar _jpg = __w_pdfjs_require__(132);\n\nvar JpegStream = function JpegStreamClosure() {\n  function JpegStream(stream, maybeLength, dict, params) {\n    var ch = void 0;\n    while ((ch = stream.getByte()) !== -1) {\n      if (ch === 0xFF) {\n        stream.skip(-1);\n        break;\n      }\n    }\n    this.stream = stream;\n    this.maybeLength = maybeLength;\n    this.dict = dict;\n    this.params = params;\n    _stream.DecodeStream.call(this, maybeLength);\n  }\n  JpegStream.prototype = Object.create(_stream.DecodeStream.prototype);\n  Object.defineProperty(JpegStream.prototype, 'bytes', {\n    get: function JpegStream_bytes() {\n      return (0, _util.shadow)(this, 'bytes', this.stream.getBytes(this.maybeLength));\n    },\n    configurable: true\n  });\n  JpegStream.prototype.ensureBuffer = function (requested) {};\n  JpegStream.prototype.readBlock = function () {\n    if (this.eof) {\n      return;\n    }\n    var jpegOptions = {\n      decodeTransform: undefined,\n      colorTransform: undefined\n    };\n    var decodeArr = this.dict.getArray('Decode', 'D');\n    if (this.forceRGB && Array.isArray(decodeArr)) {\n      var bitsPerComponent = this.dict.get('BitsPerComponent') || 8;\n      var decodeArrLength = decodeArr.length;\n      var transform = new Int32Array(decodeArrLength);\n      var transformNeeded = false;\n      var maxValue = (1 << bitsPerComponent) - 1;\n      for (var 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 ((0, _primitives.isDict)(this.params)) {\n      var colorTransform = this.params.get('ColorTransform');\n      if (Number.isInteger(colorTransform)) {\n        jpegOptions.colorTransform = colorTransform;\n      }\n    }\n    var jpegImage = new _jpg.JpegImage(jpegOptions);\n    jpegImage.parse(this.bytes);\n    var data = jpegImage.getData(this.drawWidth, this.drawHeight, this.forceRGB);\n    this.buffer = data;\n    this.bufferLength = data.length;\n    this.eof = true;\n  };\n  JpegStream.prototype.getIR = function () {\n    var forceDataSchema = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n    return (0, _util.createObjectURL)(this.bytes, 'image/jpeg', forceDataSchema);\n  };\n  return JpegStream;\n}();\nexports.JpegStream = JpegStream;\n\n/***/ }),\n/* 132 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.JpegImage = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _util = __w_pdfjs_require__(2);\n\nvar JpegError = function JpegErrorClosure() {\n  function JpegError(msg) {\n    this.message = 'JPEG error: ' + msg;\n  }\n  JpegError.prototype = new Error();\n  JpegError.prototype.name = 'JpegError';\n  JpegError.constructor = JpegError;\n  return JpegError;\n}();\nvar DNLMarkerError = function DNLMarkerErrorClosure() {\n  function DNLMarkerError(message, scanLines) {\n    this.message = message;\n    this.scanLines = scanLines;\n  }\n  DNLMarkerError.prototype = new Error();\n  DNLMarkerError.prototype.name = 'DNLMarkerError';\n  DNLMarkerError.constructor = DNLMarkerError;\n  return DNLMarkerError;\n}();\nvar EOIMarkerError = function EOIMarkerErrorClosure() {\n  function EOIMarkerError(message) {\n    this.message = message;\n  }\n  EOIMarkerError.prototype = new Error();\n  EOIMarkerError.prototype.name = 'EOIMarkerError';\n  EOIMarkerError.constructor = EOIMarkerError;\n  return EOIMarkerError;\n}();\nvar JpegImage = function JpegImageClosure() {\n  var 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]);\n  var dctCos1 = 4017;\n  var dctSin1 = 799;\n  var dctCos3 = 3406;\n  var dctSin3 = 2276;\n  var dctCos6 = 1567;\n  var dctSin6 = 3784;\n  var dctSqrt2 = 5793;\n  var dctSqrt1d2 = 2896;\n  function JpegImage() {\n    var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n        _ref$decodeTransform = _ref.decodeTransform,\n        decodeTransform = _ref$decodeTransform === undefined ? null : _ref$decodeTransform,\n        _ref$colorTransform = _ref.colorTransform,\n        colorTransform = _ref$colorTransform === undefined ? -1 : _ref$colorTransform;\n\n    this._decodeTransform = decodeTransform;\n    this._colorTransform = colorTransform;\n  }\n  function buildHuffmanTable(codeLengths, values) {\n    var k = 0,\n        code = [],\n        i,\n        j,\n        length = 16;\n    while (length > 0 && !codeLengths[length - 1]) {\n      length--;\n    }\n    code.push({\n      children: [],\n      index: 0\n    });\n    var 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  }\n  function getBlockBufferOffset(component, row, col) {\n    return 64 * ((component.blocksPerLine + 1) * row + col);\n  }\n  function decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successivePrev, successive) {\n    var parseDNLMarker = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : false;\n\n    var mcusPerLine = frame.mcusPerLine;\n    var progressive = frame.progressive;\n    var startOffset = offset,\n        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        var nextByte = data[offset++];\n        if (nextByte) {\n          if (nextByte === 0xDC && parseDNLMarker) {\n            offset += 2;\n            var scanLines = data[offset++] << 8 | data[offset++];\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            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      var node = tree;\n      while (true) {\n        node = node[readBit()];\n        if (typeof node === 'number') {\n          return node;\n        }\n        if ((typeof node === 'undefined' ? 'undefined' : _typeof(node)) !== 'object') {\n          throw new JpegError('invalid huffman sequence');\n        }\n      }\n    }\n    function receive(length) {\n      var 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      var n = receive(length);\n      if (n >= 1 << length - 1) {\n        return n;\n      }\n      return n + (-1 << length) + 1;\n    }\n    function decodeBaseline(component, offset) {\n      var t = decodeHuffman(component.huffmanTableDC);\n      var diff = t === 0 ? 0 : receiveAndExtend(t);\n      component.blockData[offset] = component.pred += diff;\n      var k = 1;\n      while (k < 64) {\n        var rs = decodeHuffman(component.huffmanTableAC);\n        var 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        var z = dctZigZag[k];\n        component.blockData[offset + z] = receiveAndExtend(s);\n        k++;\n      }\n    }\n    function decodeDCFirst(component, offset) {\n      var t = decodeHuffman(component.huffmanTableDC);\n      var diff = t === 0 ? 0 : receiveAndExtend(t) << successive;\n      component.blockData[offset] = component.pred += diff;\n    }\n    function decodeDCSuccessive(component, offset) {\n      component.blockData[offset] |= readBit() << successive;\n    }\n    var eobrun = 0;\n    function decodeACFirst(component, offset) {\n      if (eobrun > 0) {\n        eobrun--;\n        return;\n      }\n      var k = spectralStart,\n          e = spectralEnd;\n      while (k <= e) {\n        var rs = decodeHuffman(component.huffmanTableAC);\n        var 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        var z = dctZigZag[k];\n        component.blockData[offset + z] = receiveAndExtend(s) * (1 << successive);\n        k++;\n      }\n    }\n    var successiveACState = 0,\n        successiveACNextValue;\n    function decodeACSuccessive(component, offset) {\n      var k = spectralStart;\n      var e = spectralEnd;\n      var r = 0;\n      var s;\n      var rs;\n      while (k <= e) {\n        var offsetZ = offset + dctZigZag[k];\n        var 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    function decodeMcu(component, decode, mcu, row, col) {\n      var mcuRow = mcu / mcusPerLine | 0;\n      var mcuCol = mcu % mcusPerLine;\n      var blockRow = mcuRow * component.v + row;\n      var blockCol = mcuCol * component.h + col;\n      var offset = getBlockBufferOffset(component, blockRow, blockCol);\n      decode(component, offset);\n    }\n    function decodeBlock(component, decode, mcu) {\n      var blockRow = mcu / component.blocksPerLine | 0;\n      var blockCol = mcu % component.blocksPerLine;\n      var offset = getBlockBufferOffset(component, blockRow, blockCol);\n      decode(component, offset);\n    }\n    var componentsLength = components.length;\n    var component, i, j, k, n;\n    var 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    var mcu = 0,\n        fileMarker;\n    var mcuExpected;\n    if (componentsLength === 1) {\n      mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn;\n    } else {\n      mcuExpected = mcusPerLine * frame.mcusPerColumn;\n    }\n    var h, v;\n    while (mcu < mcuExpected) {\n      var mcuToRead = resetInterval ? Math.min(mcuExpected - mcu, resetInterval) : mcuExpected;\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      bitsCount = 0;\n      fileMarker = findNextFileMarker(data, offset);\n      if (fileMarker && fileMarker.invalid) {\n        (0, _util.warn)('decodeScan - unexpected MCU data, current marker is: ' + fileMarker.invalid);\n        offset = fileMarker.offset;\n      }\n      var marker = fileMarker && fileMarker.marker;\n      if (!marker || marker <= 0xFF00) {\n        throw new JpegError('marker was not found');\n      }\n      if (marker >= 0xFFD0 && marker <= 0xFFD7) {\n        offset += 2;\n      } else {\n        break;\n      }\n    }\n    fileMarker = findNextFileMarker(data, offset);\n    if (fileMarker && fileMarker.invalid) {\n      (0, _util.warn)('decodeScan - unexpected Scan data, current marker is: ' + fileMarker.invalid);\n      offset = fileMarker.offset;\n    }\n    return offset - startOffset;\n  }\n  function quantizeAndInverse(component, blockBufferOffset, p) {\n    var qt = component.quantizationTable,\n        blockData = component.blockData;\n    var v0, v1, v2, v3, v4, v5, v6, v7;\n    var p0, p1, p2, p3, p4, p5, p6, p7;\n    var t;\n    if (!qt) {\n      throw new JpegError('missing required Quantization Table.');\n    }\n    for (var 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 (var 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        t = t < -2040 ? 0 : t >= 2024 ? 255 : t + 2056 >> 4;\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      p0 = p0 < 16 ? 0 : p0 >= 4080 ? 255 : p0 >> 4;\n      p1 = p1 < 16 ? 0 : p1 >= 4080 ? 255 : p1 >> 4;\n      p2 = p2 < 16 ? 0 : p2 >= 4080 ? 255 : p2 >> 4;\n      p3 = p3 < 16 ? 0 : p3 >= 4080 ? 255 : p3 >> 4;\n      p4 = p4 < 16 ? 0 : p4 >= 4080 ? 255 : p4 >> 4;\n      p5 = p5 < 16 ? 0 : p5 >= 4080 ? 255 : p5 >> 4;\n      p6 = p6 < 16 ? 0 : p6 >= 4080 ? 255 : p6 >> 4;\n      p7 = p7 < 16 ? 0 : p7 >= 4080 ? 255 : p7 >> 4;\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  }\n  function buildComponentData(frame, component) {\n    var blocksPerLine = component.blocksPerLine;\n    var blocksPerColumn = component.blocksPerColumn;\n    var computationBuffer = new Int16Array(64);\n    for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {\n      for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {\n        var offset = getBlockBufferOffset(component, blockRow, blockCol);\n        quantizeAndInverse(component, offset, computationBuffer);\n      }\n    }\n    return component.blockData;\n  }\n  function findNextFileMarker(data, currentPos) {\n    var startPos = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : currentPos;\n\n    function peekUint16(pos) {\n      return data[pos] << 8 | data[pos + 1];\n    }\n    var maxPos = data.length - 1;\n    var newPos = startPos < currentPos ? startPos : currentPos;\n    if (currentPos >= maxPos) {\n      return null;\n    }\n    var currentMarker = peekUint16(currentPos);\n    if (currentMarker >= 0xFFC0 && currentMarker <= 0xFFFE) {\n      return {\n        invalid: null,\n        marker: currentMarker,\n        offset: currentPos\n      };\n    }\n    var newMarker = peekUint16(newPos);\n    while (!(newMarker >= 0xFFC0 && newMarker <= 0xFFFE)) {\n      if (++newPos >= maxPos) {\n        return null;\n      }\n      newMarker = peekUint16(newPos);\n    }\n    return {\n      invalid: currentMarker.toString(16),\n      marker: newMarker,\n      offset: newPos\n    };\n  }\n  JpegImage.prototype = {\n    parse: function parse(data) {\n      var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n          _ref2$dnlScanLines = _ref2.dnlScanLines,\n          dnlScanLines = _ref2$dnlScanLines === undefined ? null : _ref2$dnlScanLines;\n\n      function readUint16() {\n        var value = data[offset] << 8 | data[offset + 1];\n        offset += 2;\n        return value;\n      }\n      function readDataBlock() {\n        var length = readUint16();\n        var endOffset = offset + length - 2;\n        var fileMarker = findNextFileMarker(data, endOffset, offset);\n        if (fileMarker && fileMarker.invalid) {\n          (0, _util.warn)('readDataBlock - incorrect length, current marker is: ' + fileMarker.invalid);\n          endOffset = fileMarker.offset;\n        }\n        var array = data.subarray(offset, endOffset);\n        offset += array.length;\n        return array;\n      }\n      function prepareComponents(frame) {\n        var mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / frame.maxH);\n        var mcusPerColumn = Math.ceil(frame.scanLines / 8 / frame.maxV);\n        for (var i = 0; i < frame.components.length; i++) {\n          component = frame.components[i];\n          var blocksPerLine = Math.ceil(Math.ceil(frame.samplesPerLine / 8) * component.h / frame.maxH);\n          var blocksPerColumn = Math.ceil(Math.ceil(frame.scanLines / 8) * component.v / frame.maxV);\n          var blocksPerLineForMcu = mcusPerLine * component.h;\n          var blocksPerColumnForMcu = mcusPerColumn * component.v;\n          var 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      var offset = 0;\n      var jfif = null;\n      var adobe = null;\n      var frame, resetInterval;\n      var numSOSMarkers = 0;\n      var quantizationTables = [];\n      var huffmanTablesAC = [],\n          huffmanTablesDC = [];\n      var fileMarker = readUint16();\n      if (fileMarker !== 0xFFD8) {\n        throw new JpegError('SOI not found');\n      }\n      fileMarker = readUint16();\n      markerLoop: while (fileMarker !== 0xFFD9) {\n        var 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            var 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            var quantizationTablesLength = readUint16();\n            var quantizationTablesEnd = quantizationTablesLength + offset - 2;\n            var z;\n            while (offset < quantizationTablesEnd) {\n              var quantizationTableSpec = data[offset++];\n              var 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();\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            readUint16();\n            frame = {};\n            frame.extended = fileMarker === 0xFFC1;\n            frame.progressive = fileMarker === 0xFFC2;\n            frame.precision = data[offset++];\n            var sofScanLines = readUint16();\n            frame.scanLines = dnlScanLines || sofScanLines;\n            frame.samplesPerLine = readUint16();\n            frame.components = [];\n            frame.componentIds = {};\n            var componentsCount = data[offset++],\n                componentId;\n            var maxH = 0,\n                maxV = 0;\n            for (i = 0; i < componentsCount; i++) {\n              componentId = data[offset];\n              var h = data[offset + 1] >> 4;\n              var v = data[offset + 1] & 15;\n              if (maxH < h) {\n                maxH = h;\n              }\n              if (maxV < v) {\n                maxV = v;\n              }\n              var qId = data[offset + 2];\n              l = frame.components.push({\n                h: h,\n                v: 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            var huffmanLength = readUint16();\n            for (i = 2; i < huffmanLength;) {\n              var huffmanTableSpec = data[offset++];\n              var codeLengths = new Uint8Array(16);\n              var codeLengthSum = 0;\n              for (j = 0; j < 16; j++, offset++) {\n                codeLengthSum += codeLengths[j] = data[offset];\n              }\n              var 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            readUint16();\n            resetInterval = readUint16();\n            break;\n          case 0xFFDA:\n            var parseDNLMarker = ++numSOSMarkers === 1 && !dnlScanLines;\n            readUint16();\n            var selectorsCount = data[offset++];\n            var components = [],\n                component;\n            for (i = 0; i < selectorsCount; i++) {\n              var componentIndex = frame.componentIds[data[offset++]];\n              component = frame.components[componentIndex];\n              var tableSpec = data[offset++];\n              component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4];\n              component.huffmanTableAC = huffmanTablesAC[tableSpec & 15];\n              components.push(component);\n            }\n            var spectralStart = data[offset++];\n            var spectralEnd = data[offset++];\n            var successiveApproximation = data[offset++];\n            try {\n              var 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                (0, _util.warn)(ex.message + ' -- attempting to re-parse the JPEG image.');\n                return this.parse(data, { dnlScanLines: ex.scanLines });\n              } else if (ex instanceof EOIMarkerError) {\n                (0, _util.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            if (data[offset - 3] === 0xFF && data[offset - 2] >= 0xC0 && data[offset - 2] <= 0xFE) {\n              offset -= 3;\n              break;\n            }\n            var nextFileMarker = findNextFileMarker(data, offset - 2);\n            if (nextFileMarker && nextFileMarker.invalid) {\n              (0, _util.warn)('JpegImage.parse - unexpected data, current marker is: ' + nextFileMarker.invalid);\n              offset = nextFileMarker.offset;\n              break;\n            }\n            throw new JpegError('unknown marker ' + fileMarker.toString(16));\n        }\n        fileMarker = readUint16();\n      }\n      this.width = frame.samplesPerLine;\n      this.height = frame.scanLines;\n      this.jfif = jfif;\n      this.adobe = adobe;\n      this.components = [];\n      for (i = 0; i < frame.components.length; i++) {\n        component = frame.components[i];\n        var quantizationTable = quantizationTables[component.quantizationId];\n        if (quantizationTable) {\n          component.quantizationTable = quantizationTable;\n        }\n        this.components.push({\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    },\n\n    _getLinearizedBlockData: function getLinearizedBlockData(width, height) {\n      var scaleX = this.width / width,\n          scaleY = this.height / height;\n      var component, componentScaleX, componentScaleY, blocksPerScanline;\n      var x, y, i, j, k;\n      var index;\n      var offset = 0;\n      var output;\n      var numComponents = this.components.length;\n      var dataLength = width * height * numComponents;\n      var data = new Uint8ClampedArray(dataLength);\n      var xScaleBlockOffset = new Uint32Array(width);\n      var mask3LSB = 0xfffffff8;\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        for (x = 0; x < width; x++) {\n          j = 0 | x * componentScaleX;\n          xScaleBlockOffset[x] = (j & mask3LSB) << 3 | j & 7;\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      var transform = this._decodeTransform;\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    _isColorConversionNeeded: function _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        }\n        return true;\n      }\n      if (this._colorTransform === 1) {\n        return true;\n      }\n      return false;\n    },\n\n    _convertYccToRgb: function convertYccToRgb(data) {\n      var Y, Cb, Cr;\n      for (var 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    _convertYcckToRgb: function convertYcckToRgb(data) {\n      var Y, Cb, Cr, k;\n      var offset = 0;\n      for (var 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    _convertYcckToCmyk: function convertYcckToCmyk(data) {\n      var Y, Cb, Cr;\n      for (var 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: function convertCmykToRgb(data) {\n      var c, m, y, k;\n      var offset = 0;\n      var scale = 1 / 255;\n      for (var i = 0, length = data.length; i < length; i += 4) {\n        c = data[i] * scale;\n        m = data[i + 1] * scale;\n        y = data[i + 2] * scale;\n        k = data[i + 3] * scale;\n        data[offset++] = 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        data[offset++] = 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        data[offset++] = 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      return data.subarray(0, offset);\n    },\n    getData: function getData(width, height, forceRGBoutput) {\n      if (this.numComponents > 4) {\n        throw new JpegError('Unsupported color mode');\n      }\n      var data = this._getLinearizedBlockData(width, height);\n      if (this.numComponents === 1 && forceRGBoutput) {\n        var dataLength = data.length;\n        var rgbData = new Uint8ClampedArray(dataLength * 3);\n        var offset = 0;\n        for (var i = 0; i < dataLength; i++) {\n          var grayColor = data[i];\n          rgbData[offset++] = grayColor;\n          rgbData[offset++] = grayColor;\n          rgbData[offset++] = grayColor;\n        }\n        return rgbData;\n      } else if (this.numComponents === 3 && this._isColorConversionNeeded()) {\n        return this._convertYccToRgb(data);\n      } else if (this.numComponents === 4) {\n        if (this._isColorConversionNeeded()) {\n          if (forceRGBoutput) {\n            return this._convertYcckToRgb(data);\n          }\n          return this._convertYcckToCmyk(data);\n        } else if (forceRGBoutput) {\n          return this._convertCmykToRgb(data);\n        }\n      }\n      return data;\n    }\n  };\n  return JpegImage;\n}();\nexports.JpegImage = JpegImage;\n\n/***/ }),\n/* 133 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.JpxStream = undefined;\n\nvar _stream = __w_pdfjs_require__(125);\n\nvar _jpx = __w_pdfjs_require__(134);\n\nvar _util = __w_pdfjs_require__(2);\n\nvar JpxStream = function JpxStreamClosure() {\n  function JpxStream(stream, maybeLength, dict, params) {\n    this.stream = stream;\n    this.maybeLength = maybeLength;\n    this.dict = dict;\n    this.params = params;\n    _stream.DecodeStream.call(this, maybeLength);\n  }\n  JpxStream.prototype = Object.create(_stream.DecodeStream.prototype);\n  Object.defineProperty(JpxStream.prototype, 'bytes', {\n    get: function JpxStream_bytes() {\n      return (0, _util.shadow)(this, 'bytes', this.stream.getBytes(this.maybeLength));\n    },\n    configurable: true\n  });\n  JpxStream.prototype.ensureBuffer = function (requested) {};\n  JpxStream.prototype.readBlock = function () {\n    if (this.eof) {\n      return;\n    }\n    var jpxImage = new _jpx.JpxImage();\n    jpxImage.parse(this.bytes);\n    var width = jpxImage.width;\n    var height = jpxImage.height;\n    var componentsCount = jpxImage.componentsCount;\n    var tileCount = jpxImage.tiles.length;\n    if (tileCount === 1) {\n      this.buffer = jpxImage.tiles[0].items;\n    } else {\n      var data = new Uint8ClampedArray(width * height * componentsCount);\n      for (var k = 0; k < tileCount; k++) {\n        var tileComponents = jpxImage.tiles[k];\n        var tileWidth = tileComponents.width;\n        var tileHeight = tileComponents.height;\n        var tileLeft = tileComponents.left;\n        var tileTop = tileComponents.top;\n        var src = tileComponents.items;\n        var srcPosition = 0;\n        var dataPosition = (width * tileTop + tileLeft) * componentsCount;\n        var imgRowSize = width * componentsCount;\n        var tileRowSize = tileWidth * componentsCount;\n        for (var j = 0; j < tileHeight; j++) {\n          var rowBytes = src.subarray(srcPosition, srcPosition + tileRowSize);\n          data.set(rowBytes, dataPosition);\n          srcPosition += tileRowSize;\n          dataPosition += imgRowSize;\n        }\n      }\n      this.buffer = data;\n    }\n    this.bufferLength = this.buffer.length;\n    this.eof = true;\n  };\n  return JpxStream;\n}();\nexports.JpxStream = JpxStream;\n\n/***/ }),\n/* 134 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.JpxImage = undefined;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _arithmetic_decoder = __w_pdfjs_require__(130);\n\nvar JpxError = function JpxErrorClosure() {\n  function JpxError(msg) {\n    this.message = 'JPX error: ' + msg;\n  }\n  JpxError.prototype = new Error();\n  JpxError.prototype.name = 'JpxError';\n  JpxError.constructor = JpxError;\n  return JpxError;\n}();\nvar JpxImage = function JpxImageClosure() {\n  var SubbandsGainLog2 = {\n    'LL': 0,\n    'LH': 1,\n    'HL': 1,\n    'HH': 2\n  };\n  function JpxImage() {\n    this.failOnCorruptedImage = false;\n  }\n  JpxImage.prototype = {\n    parse: function JpxImage_parse(data) {\n      var head = (0, _util.readUint16)(data, 0);\n      if (head === 0xFF4F) {\n        this.parseCodestream(data, 0, data.length);\n        return;\n      }\n      var position = 0,\n          length = data.length;\n      while (position < length) {\n        var headerSize = 8;\n        var lbox = (0, _util.readUint32)(data, position);\n        var tbox = (0, _util.readUint32)(data, position + 4);\n        position += headerSize;\n        if (lbox === 1) {\n          lbox = (0, _util.readUint32)(data, position) * 4294967296 + (0, _util.readUint32)(data, position + 4);\n          position += 8;\n          headerSize += 8;\n        }\n        if (lbox === 0) {\n          lbox = length - position + headerSize;\n        }\n        if (lbox < headerSize) {\n          throw new JpxError('Invalid box field size');\n        }\n        var dataLength = lbox - headerSize;\n        var jumpDataLength = true;\n        switch (tbox) {\n          case 0x6A703268:\n            jumpDataLength = false;\n            break;\n          case 0x636F6C72:\n            var method = data[position];\n            if (method === 1) {\n              var colorspace = (0, _util.readUint32)(data, position + 3);\n              switch (colorspace) {\n                case 16:\n                case 17:\n                case 18:\n                  break;\n                default:\n                  (0, _util.warn)('Unknown colorspace ' + colorspace);\n                  break;\n              }\n            } else if (method === 2) {\n              (0, _util.info)('ICC profile not supported');\n            }\n            break;\n          case 0x6A703263:\n            this.parseCodestream(data, position, position + dataLength);\n            break;\n          case 0x6A502020:\n            if ((0, _util.readUint32)(data, position) !== 0x0d0a870a) {\n              (0, _util.warn)('Invalid JP2 signature');\n            }\n            break;\n          case 0x6A501A1A:\n          case 0x66747970:\n          case 0x72726571:\n          case 0x72657320:\n          case 0x69686472:\n            break;\n          default:\n            var headerType = String.fromCharCode(tbox >> 24 & 0xFF, tbox >> 16 & 0xFF, tbox >> 8 & 0xFF, tbox & 0xFF);\n            (0, _util.warn)('Unsupported header type ' + tbox + ' (' + headerType + ')');\n            break;\n        }\n        if (jumpDataLength) {\n          position += dataLength;\n        }\n      }\n    },\n    parseImageProperties: function JpxImage_parseImageProperties(stream) {\n      var newByte = stream.getByte();\n      while (newByte >= 0) {\n        var oldByte = newByte;\n        newByte = stream.getByte();\n        var code = oldByte << 8 | newByte;\n        if (code === 0xFF51) {\n          stream.skip(4);\n          var Xsiz = stream.getInt32() >>> 0;\n          var Ysiz = stream.getInt32() >>> 0;\n          var XOsiz = stream.getInt32() >>> 0;\n          var YOsiz = stream.getInt32() >>> 0;\n          stream.skip(16);\n          var Csiz = stream.getUint16();\n          this.width = Xsiz - XOsiz;\n          this.height = Ysiz - YOsiz;\n          this.componentsCount = Csiz;\n          this.bitsPerComponent = 8;\n          return;\n        }\n      }\n      throw new JpxError('No size marker found in JPX stream');\n    },\n    parseCodestream: function JpxImage_parseCodestream(data, start, end) {\n      var context = {};\n      var doNotRecover = false;\n      try {\n        var position = start;\n        while (position + 1 < end) {\n          var code = (0, _util.readUint16)(data, position);\n          position += 2;\n          var length = 0,\n              j,\n              sqcd,\n              spqcds,\n              spqcdSize,\n              scalarExpounded,\n              tile;\n          switch (code) {\n            case 0xFF4F:\n              context.mainHeader = true;\n              break;\n            case 0xFFD9:\n              break;\n            case 0xFF51:\n              length = (0, _util.readUint16)(data, position);\n              var siz = {};\n              siz.Xsiz = (0, _util.readUint32)(data, position + 4);\n              siz.Ysiz = (0, _util.readUint32)(data, position + 8);\n              siz.XOsiz = (0, _util.readUint32)(data, position + 12);\n              siz.YOsiz = (0, _util.readUint32)(data, position + 16);\n              siz.XTsiz = (0, _util.readUint32)(data, position + 20);\n              siz.YTsiz = (0, _util.readUint32)(data, position + 24);\n              siz.XTOsiz = (0, _util.readUint32)(data, position + 28);\n              siz.YTOsiz = (0, _util.readUint32)(data, position + 32);\n              var componentsCount = (0, _util.readUint16)(data, position + 36);\n              siz.Csiz = componentsCount;\n              var components = [];\n              j = position + 38;\n              for (var i = 0; i < componentsCount; i++) {\n                var component = {\n                  precision: (data[j] & 0x7F) + 1,\n                  isSigned: !!(data[j] & 0x80),\n                  XRsiz: data[j + 1],\n                  YRsiz: data[j + 2]\n                };\n                j += 3;\n                calculateComponentDimensions(component, siz);\n                components.push(component);\n              }\n              context.SIZ = siz;\n              context.components = components;\n              calculateTileGrids(context, components);\n              context.QCC = [];\n              context.COC = [];\n              break;\n            case 0xFF5C:\n              length = (0, _util.readUint16)(data, position);\n              var qcd = {};\n              j = position + 2;\n              sqcd = data[j++];\n              switch (sqcd & 0x1F) {\n                case 0:\n                  spqcdSize = 8;\n                  scalarExpounded = true;\n                  break;\n                case 1:\n                  spqcdSize = 16;\n                  scalarExpounded = false;\n                  break;\n                case 2:\n                  spqcdSize = 16;\n                  scalarExpounded = true;\n                  break;\n                default:\n                  throw new Error('Invalid SQcd value ' + sqcd);\n              }\n              qcd.noQuantization = spqcdSize === 8;\n              qcd.scalarExpounded = scalarExpounded;\n              qcd.guardBits = sqcd >> 5;\n              spqcds = [];\n              while (j < length + position) {\n                var spqcd = {};\n                if (spqcdSize === 8) {\n                  spqcd.epsilon = data[j++] >> 3;\n                  spqcd.mu = 0;\n                } else {\n                  spqcd.epsilon = data[j] >> 3;\n                  spqcd.mu = (data[j] & 0x7) << 8 | data[j + 1];\n                  j += 2;\n                }\n                spqcds.push(spqcd);\n              }\n              qcd.SPqcds = spqcds;\n              if (context.mainHeader) {\n                context.QCD = qcd;\n              } else {\n                context.currentTile.QCD = qcd;\n                context.currentTile.QCC = [];\n              }\n              break;\n            case 0xFF5D:\n              length = (0, _util.readUint16)(data, position);\n              var qcc = {};\n              j = position + 2;\n              var cqcc;\n              if (context.SIZ.Csiz < 257) {\n                cqcc = data[j++];\n              } else {\n                cqcc = (0, _util.readUint16)(data, j);\n                j += 2;\n              }\n              sqcd = data[j++];\n              switch (sqcd & 0x1F) {\n                case 0:\n                  spqcdSize = 8;\n                  scalarExpounded = true;\n                  break;\n                case 1:\n                  spqcdSize = 16;\n                  scalarExpounded = false;\n                  break;\n                case 2:\n                  spqcdSize = 16;\n                  scalarExpounded = true;\n                  break;\n                default:\n                  throw new Error('Invalid SQcd value ' + sqcd);\n              }\n              qcc.noQuantization = spqcdSize === 8;\n              qcc.scalarExpounded = scalarExpounded;\n              qcc.guardBits = sqcd >> 5;\n              spqcds = [];\n              while (j < length + position) {\n                spqcd = {};\n                if (spqcdSize === 8) {\n                  spqcd.epsilon = data[j++] >> 3;\n                  spqcd.mu = 0;\n                } else {\n                  spqcd.epsilon = data[j] >> 3;\n                  spqcd.mu = (data[j] & 0x7) << 8 | data[j + 1];\n                  j += 2;\n                }\n                spqcds.push(spqcd);\n              }\n              qcc.SPqcds = spqcds;\n              if (context.mainHeader) {\n                context.QCC[cqcc] = qcc;\n              } else {\n                context.currentTile.QCC[cqcc] = qcc;\n              }\n              break;\n            case 0xFF52:\n              length = (0, _util.readUint16)(data, position);\n              var cod = {};\n              j = position + 2;\n              var scod = data[j++];\n              cod.entropyCoderWithCustomPrecincts = !!(scod & 1);\n              cod.sopMarkerUsed = !!(scod & 2);\n              cod.ephMarkerUsed = !!(scod & 4);\n              cod.progressionOrder = data[j++];\n              cod.layersCount = (0, _util.readUint16)(data, j);\n              j += 2;\n              cod.multipleComponentTransform = data[j++];\n              cod.decompositionLevelsCount = data[j++];\n              cod.xcb = (data[j++] & 0xF) + 2;\n              cod.ycb = (data[j++] & 0xF) + 2;\n              var blockStyle = data[j++];\n              cod.selectiveArithmeticCodingBypass = !!(blockStyle & 1);\n              cod.resetContextProbabilities = !!(blockStyle & 2);\n              cod.terminationOnEachCodingPass = !!(blockStyle & 4);\n              cod.verticallyStripe = !!(blockStyle & 8);\n              cod.predictableTermination = !!(blockStyle & 16);\n              cod.segmentationSymbolUsed = !!(blockStyle & 32);\n              cod.reversibleTransformation = data[j++];\n              if (cod.entropyCoderWithCustomPrecincts) {\n                var precinctsSizes = [];\n                while (j < length + position) {\n                  var precinctsSize = data[j++];\n                  precinctsSizes.push({\n                    PPx: precinctsSize & 0xF,\n                    PPy: precinctsSize >> 4\n                  });\n                }\n                cod.precinctsSizes = precinctsSizes;\n              }\n              var unsupported = [];\n              if (cod.selectiveArithmeticCodingBypass) {\n                unsupported.push('selectiveArithmeticCodingBypass');\n              }\n              if (cod.resetContextProbabilities) {\n                unsupported.push('resetContextProbabilities');\n              }\n              if (cod.terminationOnEachCodingPass) {\n                unsupported.push('terminationOnEachCodingPass');\n              }\n              if (cod.verticallyStripe) {\n                unsupported.push('verticallyStripe');\n              }\n              if (cod.predictableTermination) {\n                unsupported.push('predictableTermination');\n              }\n              if (unsupported.length > 0) {\n                doNotRecover = true;\n                throw new Error('Unsupported COD options (' + unsupported.join(', ') + ')');\n              }\n              if (context.mainHeader) {\n                context.COD = cod;\n              } else {\n                context.currentTile.COD = cod;\n                context.currentTile.COC = [];\n              }\n              break;\n            case 0xFF90:\n              length = (0, _util.readUint16)(data, position);\n              tile = {};\n              tile.index = (0, _util.readUint16)(data, position + 2);\n              tile.length = (0, _util.readUint32)(data, position + 4);\n              tile.dataEnd = tile.length + position - 2;\n              tile.partIndex = data[position + 8];\n              tile.partsCount = data[position + 9];\n              context.mainHeader = false;\n              if (tile.partIndex === 0) {\n                tile.COD = context.COD;\n                tile.COC = context.COC.slice(0);\n                tile.QCD = context.QCD;\n                tile.QCC = context.QCC.slice(0);\n              }\n              context.currentTile = tile;\n              break;\n            case 0xFF93:\n              tile = context.currentTile;\n              if (tile.partIndex === 0) {\n                initializeTile(context, tile.index);\n                buildPackets(context);\n              }\n              length = tile.dataEnd - position;\n              parseTilePackets(context, data, position, length);\n              break;\n            case 0xFF55:\n            case 0xFF57:\n            case 0xFF58:\n            case 0xFF64:\n              length = (0, _util.readUint16)(data, position);\n              break;\n            case 0xFF53:\n              throw new Error('Codestream code 0xFF53 (COC) is ' + 'not implemented');\n            default:\n              throw new Error('Unknown codestream code: ' + code.toString(16));\n          }\n          position += length;\n        }\n      } catch (e) {\n        if (doNotRecover || this.failOnCorruptedImage) {\n          throw new JpxError(e.message);\n        } else {\n          (0, _util.warn)('JPX: Trying to recover from: ' + e.message);\n        }\n      }\n      this.tiles = transformComponents(context);\n      this.width = context.SIZ.Xsiz - context.SIZ.XOsiz;\n      this.height = context.SIZ.Ysiz - context.SIZ.YOsiz;\n      this.componentsCount = context.SIZ.Csiz;\n    }\n  };\n  function calculateComponentDimensions(component, siz) {\n    component.x0 = Math.ceil(siz.XOsiz / component.XRsiz);\n    component.x1 = Math.ceil(siz.Xsiz / component.XRsiz);\n    component.y0 = Math.ceil(siz.YOsiz / component.YRsiz);\n    component.y1 = Math.ceil(siz.Ysiz / component.YRsiz);\n    component.width = component.x1 - component.x0;\n    component.height = component.y1 - component.y0;\n  }\n  function calculateTileGrids(context, components) {\n    var siz = context.SIZ;\n    var tile,\n        tiles = [];\n    var numXtiles = Math.ceil((siz.Xsiz - siz.XTOsiz) / siz.XTsiz);\n    var numYtiles = Math.ceil((siz.Ysiz - siz.YTOsiz) / siz.YTsiz);\n    for (var q = 0; q < numYtiles; q++) {\n      for (var p = 0; p < numXtiles; p++) {\n        tile = {};\n        tile.tx0 = Math.max(siz.XTOsiz + p * siz.XTsiz, siz.XOsiz);\n        tile.ty0 = Math.max(siz.YTOsiz + q * siz.YTsiz, siz.YOsiz);\n        tile.tx1 = Math.min(siz.XTOsiz + (p + 1) * siz.XTsiz, siz.Xsiz);\n        tile.ty1 = Math.min(siz.YTOsiz + (q + 1) * siz.YTsiz, siz.Ysiz);\n        tile.width = tile.tx1 - tile.tx0;\n        tile.height = tile.ty1 - tile.ty0;\n        tile.components = [];\n        tiles.push(tile);\n      }\n    }\n    context.tiles = tiles;\n    var componentsCount = siz.Csiz;\n    for (var i = 0, ii = componentsCount; i < ii; i++) {\n      var component = components[i];\n      for (var j = 0, jj = tiles.length; j < jj; j++) {\n        var tileComponent = {};\n        tile = tiles[j];\n        tileComponent.tcx0 = Math.ceil(tile.tx0 / component.XRsiz);\n        tileComponent.tcy0 = Math.ceil(tile.ty0 / component.YRsiz);\n        tileComponent.tcx1 = Math.ceil(tile.tx1 / component.XRsiz);\n        tileComponent.tcy1 = Math.ceil(tile.ty1 / component.YRsiz);\n        tileComponent.width = tileComponent.tcx1 - tileComponent.tcx0;\n        tileComponent.height = tileComponent.tcy1 - tileComponent.tcy0;\n        tile.components[i] = tileComponent;\n      }\n    }\n  }\n  function getBlocksDimensions(context, component, r) {\n    var codOrCoc = component.codingStyleParameters;\n    var result = {};\n    if (!codOrCoc.entropyCoderWithCustomPrecincts) {\n      result.PPx = 15;\n      result.PPy = 15;\n    } else {\n      result.PPx = codOrCoc.precinctsSizes[r].PPx;\n      result.PPy = codOrCoc.precinctsSizes[r].PPy;\n    }\n    result.xcb_ = r > 0 ? Math.min(codOrCoc.xcb, result.PPx - 1) : Math.min(codOrCoc.xcb, result.PPx);\n    result.ycb_ = r > 0 ? Math.min(codOrCoc.ycb, result.PPy - 1) : Math.min(codOrCoc.ycb, result.PPy);\n    return result;\n  }\n  function buildPrecincts(context, resolution, dimensions) {\n    var precinctWidth = 1 << dimensions.PPx;\n    var precinctHeight = 1 << dimensions.PPy;\n    var isZeroRes = resolution.resLevel === 0;\n    var precinctWidthInSubband = 1 << dimensions.PPx + (isZeroRes ? 0 : -1);\n    var precinctHeightInSubband = 1 << dimensions.PPy + (isZeroRes ? 0 : -1);\n    var numprecinctswide = resolution.trx1 > resolution.trx0 ? Math.ceil(resolution.trx1 / precinctWidth) - Math.floor(resolution.trx0 / precinctWidth) : 0;\n    var numprecinctshigh = resolution.try1 > resolution.try0 ? Math.ceil(resolution.try1 / precinctHeight) - Math.floor(resolution.try0 / precinctHeight) : 0;\n    var numprecincts = numprecinctswide * numprecinctshigh;\n    resolution.precinctParameters = {\n      precinctWidth: precinctWidth,\n      precinctHeight: precinctHeight,\n      numprecinctswide: numprecinctswide,\n      numprecinctshigh: numprecinctshigh,\n      numprecincts: numprecincts,\n      precinctWidthInSubband: precinctWidthInSubband,\n      precinctHeightInSubband: precinctHeightInSubband\n    };\n  }\n  function buildCodeblocks(context, subband, dimensions) {\n    var xcb_ = dimensions.xcb_;\n    var ycb_ = dimensions.ycb_;\n    var codeblockWidth = 1 << xcb_;\n    var codeblockHeight = 1 << ycb_;\n    var cbx0 = subband.tbx0 >> xcb_;\n    var cby0 = subband.tby0 >> ycb_;\n    var cbx1 = subband.tbx1 + codeblockWidth - 1 >> xcb_;\n    var cby1 = subband.tby1 + codeblockHeight - 1 >> ycb_;\n    var precinctParameters = subband.resolution.precinctParameters;\n    var codeblocks = [];\n    var precincts = [];\n    var i, j, codeblock, precinctNumber;\n    for (j = cby0; j < cby1; j++) {\n      for (i = cbx0; i < cbx1; i++) {\n        codeblock = {\n          cbx: i,\n          cby: j,\n          tbx0: codeblockWidth * i,\n          tby0: codeblockHeight * j,\n          tbx1: codeblockWidth * (i + 1),\n          tby1: codeblockHeight * (j + 1)\n        };\n        codeblock.tbx0_ = Math.max(subband.tbx0, codeblock.tbx0);\n        codeblock.tby0_ = Math.max(subband.tby0, codeblock.tby0);\n        codeblock.tbx1_ = Math.min(subband.tbx1, codeblock.tbx1);\n        codeblock.tby1_ = Math.min(subband.tby1, codeblock.tby1);\n        var pi = Math.floor((codeblock.tbx0_ - subband.tbx0) / precinctParameters.precinctWidthInSubband);\n        var pj = Math.floor((codeblock.tby0_ - subband.tby0) / precinctParameters.precinctHeightInSubband);\n        precinctNumber = pi + pj * precinctParameters.numprecinctswide;\n        codeblock.precinctNumber = precinctNumber;\n        codeblock.subbandType = subband.type;\n        codeblock.Lblock = 3;\n        if (codeblock.tbx1_ <= codeblock.tbx0_ || codeblock.tby1_ <= codeblock.tby0_) {\n          continue;\n        }\n        codeblocks.push(codeblock);\n        var precinct = precincts[precinctNumber];\n        if (precinct !== undefined) {\n          if (i < precinct.cbxMin) {\n            precinct.cbxMin = i;\n          } else if (i > precinct.cbxMax) {\n            precinct.cbxMax = i;\n          }\n          if (j < precinct.cbyMin) {\n            precinct.cbxMin = j;\n          } else if (j > precinct.cbyMax) {\n            precinct.cbyMax = j;\n          }\n        } else {\n          precincts[precinctNumber] = precinct = {\n            cbxMin: i,\n            cbyMin: j,\n            cbxMax: i,\n            cbyMax: j\n          };\n        }\n        codeblock.precinct = precinct;\n      }\n    }\n    subband.codeblockParameters = {\n      codeblockWidth: xcb_,\n      codeblockHeight: ycb_,\n      numcodeblockwide: cbx1 - cbx0 + 1,\n      numcodeblockhigh: cby1 - cby0 + 1\n    };\n    subband.codeblocks = codeblocks;\n    subband.precincts = precincts;\n  }\n  function createPacket(resolution, precinctNumber, layerNumber) {\n    var precinctCodeblocks = [];\n    var subbands = resolution.subbands;\n    for (var i = 0, ii = subbands.length; i < ii; i++) {\n      var subband = subbands[i];\n      var codeblocks = subband.codeblocks;\n      for (var j = 0, jj = codeblocks.length; j < jj; j++) {\n        var codeblock = codeblocks[j];\n        if (codeblock.precinctNumber !== precinctNumber) {\n          continue;\n        }\n        precinctCodeblocks.push(codeblock);\n      }\n    }\n    return {\n      layerNumber: layerNumber,\n      codeblocks: precinctCodeblocks\n    };\n  }\n  function LayerResolutionComponentPositionIterator(context) {\n    var siz = context.SIZ;\n    var tileIndex = context.currentTile.index;\n    var tile = context.tiles[tileIndex];\n    var layersCount = tile.codingStyleDefaultParameters.layersCount;\n    var componentsCount = siz.Csiz;\n    var maxDecompositionLevelsCount = 0;\n    for (var q = 0; q < componentsCount; q++) {\n      maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, tile.components[q].codingStyleParameters.decompositionLevelsCount);\n    }\n    var l = 0,\n        r = 0,\n        i = 0,\n        k = 0;\n    this.nextPacket = function JpxImage_nextPacket() {\n      for (; l < layersCount; l++) {\n        for (; r <= maxDecompositionLevelsCount; r++) {\n          for (; i < componentsCount; i++) {\n            var component = tile.components[i];\n            if (r > component.codingStyleParameters.decompositionLevelsCount) {\n              continue;\n            }\n            var resolution = component.resolutions[r];\n            var numprecincts = resolution.precinctParameters.numprecincts;\n            for (; k < numprecincts;) {\n              var packet = createPacket(resolution, k, l);\n              k++;\n              return packet;\n            }\n            k = 0;\n          }\n          i = 0;\n        }\n        r = 0;\n      }\n      throw new JpxError('Out of packets');\n    };\n  }\n  function ResolutionLayerComponentPositionIterator(context) {\n    var siz = context.SIZ;\n    var tileIndex = context.currentTile.index;\n    var tile = context.tiles[tileIndex];\n    var layersCount = tile.codingStyleDefaultParameters.layersCount;\n    var componentsCount = siz.Csiz;\n    var maxDecompositionLevelsCount = 0;\n    for (var q = 0; q < componentsCount; q++) {\n      maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, tile.components[q].codingStyleParameters.decompositionLevelsCount);\n    }\n    var r = 0,\n        l = 0,\n        i = 0,\n        k = 0;\n    this.nextPacket = function JpxImage_nextPacket() {\n      for (; r <= maxDecompositionLevelsCount; r++) {\n        for (; l < layersCount; l++) {\n          for (; i < componentsCount; i++) {\n            var component = tile.components[i];\n            if (r > component.codingStyleParameters.decompositionLevelsCount) {\n              continue;\n            }\n            var resolution = component.resolutions[r];\n            var numprecincts = resolution.precinctParameters.numprecincts;\n            for (; k < numprecincts;) {\n              var packet = createPacket(resolution, k, l);\n              k++;\n              return packet;\n            }\n            k = 0;\n          }\n          i = 0;\n        }\n        l = 0;\n      }\n      throw new JpxError('Out of packets');\n    };\n  }\n  function ResolutionPositionComponentLayerIterator(context) {\n    var siz = context.SIZ;\n    var tileIndex = context.currentTile.index;\n    var tile = context.tiles[tileIndex];\n    var layersCount = tile.codingStyleDefaultParameters.layersCount;\n    var componentsCount = siz.Csiz;\n    var l, r, c, p;\n    var maxDecompositionLevelsCount = 0;\n    for (c = 0; c < componentsCount; c++) {\n      var component = tile.components[c];\n      maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, component.codingStyleParameters.decompositionLevelsCount);\n    }\n    var maxNumPrecinctsInLevel = new Int32Array(maxDecompositionLevelsCount + 1);\n    for (r = 0; r <= maxDecompositionLevelsCount; ++r) {\n      var maxNumPrecincts = 0;\n      for (c = 0; c < componentsCount; ++c) {\n        var resolutions = tile.components[c].resolutions;\n        if (r < resolutions.length) {\n          maxNumPrecincts = Math.max(maxNumPrecincts, resolutions[r].precinctParameters.numprecincts);\n        }\n      }\n      maxNumPrecinctsInLevel[r] = maxNumPrecincts;\n    }\n    l = 0;\n    r = 0;\n    c = 0;\n    p = 0;\n    this.nextPacket = function JpxImage_nextPacket() {\n      for (; r <= maxDecompositionLevelsCount; r++) {\n        for (; p < maxNumPrecinctsInLevel[r]; p++) {\n          for (; c < componentsCount; c++) {\n            var component = tile.components[c];\n            if (r > component.codingStyleParameters.decompositionLevelsCount) {\n              continue;\n            }\n            var resolution = component.resolutions[r];\n            var numprecincts = resolution.precinctParameters.numprecincts;\n            if (p >= numprecincts) {\n              continue;\n            }\n            for (; l < layersCount;) {\n              var packet = createPacket(resolution, p, l);\n              l++;\n              return packet;\n            }\n            l = 0;\n          }\n          c = 0;\n        }\n        p = 0;\n      }\n      throw new JpxError('Out of packets');\n    };\n  }\n  function PositionComponentResolutionLayerIterator(context) {\n    var siz = context.SIZ;\n    var tileIndex = context.currentTile.index;\n    var tile = context.tiles[tileIndex];\n    var layersCount = tile.codingStyleDefaultParameters.layersCount;\n    var componentsCount = siz.Csiz;\n    var precinctsSizes = getPrecinctSizesInImageScale(tile);\n    var precinctsIterationSizes = precinctsSizes;\n    var l = 0,\n        r = 0,\n        c = 0,\n        px = 0,\n        py = 0;\n    this.nextPacket = function JpxImage_nextPacket() {\n      for (; py < precinctsIterationSizes.maxNumHigh; py++) {\n        for (; px < precinctsIterationSizes.maxNumWide; px++) {\n          for (; c < componentsCount; c++) {\n            var component = tile.components[c];\n            var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount;\n            for (; r <= decompositionLevelsCount; r++) {\n              var resolution = component.resolutions[r];\n              var sizeInImageScale = precinctsSizes.components[c].resolutions[r];\n              var k = getPrecinctIndexIfExist(px, py, sizeInImageScale, precinctsIterationSizes, resolution);\n              if (k === null) {\n                continue;\n              }\n              for (; l < layersCount;) {\n                var packet = createPacket(resolution, k, l);\n                l++;\n                return packet;\n              }\n              l = 0;\n            }\n            r = 0;\n          }\n          c = 0;\n        }\n        px = 0;\n      }\n      throw new JpxError('Out of packets');\n    };\n  }\n  function ComponentPositionResolutionLayerIterator(context) {\n    var siz = context.SIZ;\n    var tileIndex = context.currentTile.index;\n    var tile = context.tiles[tileIndex];\n    var layersCount = tile.codingStyleDefaultParameters.layersCount;\n    var componentsCount = siz.Csiz;\n    var precinctsSizes = getPrecinctSizesInImageScale(tile);\n    var l = 0,\n        r = 0,\n        c = 0,\n        px = 0,\n        py = 0;\n    this.nextPacket = function JpxImage_nextPacket() {\n      for (; c < componentsCount; ++c) {\n        var component = tile.components[c];\n        var precinctsIterationSizes = precinctsSizes.components[c];\n        var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount;\n        for (; py < precinctsIterationSizes.maxNumHigh; py++) {\n          for (; px < precinctsIterationSizes.maxNumWide; px++) {\n            for (; r <= decompositionLevelsCount; r++) {\n              var resolution = component.resolutions[r];\n              var sizeInImageScale = precinctsIterationSizes.resolutions[r];\n              var k = getPrecinctIndexIfExist(px, py, sizeInImageScale, precinctsIterationSizes, resolution);\n              if (k === null) {\n                continue;\n              }\n              for (; l < layersCount;) {\n                var packet = createPacket(resolution, k, l);\n                l++;\n                return packet;\n              }\n              l = 0;\n            }\n            r = 0;\n          }\n          px = 0;\n        }\n        py = 0;\n      }\n      throw new JpxError('Out of packets');\n    };\n  }\n  function getPrecinctIndexIfExist(pxIndex, pyIndex, sizeInImageScale, precinctIterationSizes, resolution) {\n    var posX = pxIndex * precinctIterationSizes.minWidth;\n    var posY = pyIndex * precinctIterationSizes.minHeight;\n    if (posX % sizeInImageScale.width !== 0 || posY % sizeInImageScale.height !== 0) {\n      return null;\n    }\n    var startPrecinctRowIndex = posY / sizeInImageScale.width * resolution.precinctParameters.numprecinctswide;\n    return posX / sizeInImageScale.height + startPrecinctRowIndex;\n  }\n  function getPrecinctSizesInImageScale(tile) {\n    var componentsCount = tile.components.length;\n    var minWidth = Number.MAX_VALUE;\n    var minHeight = Number.MAX_VALUE;\n    var maxNumWide = 0;\n    var maxNumHigh = 0;\n    var sizePerComponent = new Array(componentsCount);\n    for (var c = 0; c < componentsCount; c++) {\n      var component = tile.components[c];\n      var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount;\n      var sizePerResolution = new Array(decompositionLevelsCount + 1);\n      var minWidthCurrentComponent = Number.MAX_VALUE;\n      var minHeightCurrentComponent = Number.MAX_VALUE;\n      var maxNumWideCurrentComponent = 0;\n      var maxNumHighCurrentComponent = 0;\n      var scale = 1;\n      for (var r = decompositionLevelsCount; r >= 0; --r) {\n        var resolution = component.resolutions[r];\n        var widthCurrentResolution = scale * resolution.precinctParameters.precinctWidth;\n        var heightCurrentResolution = scale * resolution.precinctParameters.precinctHeight;\n        minWidthCurrentComponent = Math.min(minWidthCurrentComponent, widthCurrentResolution);\n        minHeightCurrentComponent = Math.min(minHeightCurrentComponent, heightCurrentResolution);\n        maxNumWideCurrentComponent = Math.max(maxNumWideCurrentComponent, resolution.precinctParameters.numprecinctswide);\n        maxNumHighCurrentComponent = Math.max(maxNumHighCurrentComponent, resolution.precinctParameters.numprecinctshigh);\n        sizePerResolution[r] = {\n          width: widthCurrentResolution,\n          height: heightCurrentResolution\n        };\n        scale <<= 1;\n      }\n      minWidth = Math.min(minWidth, minWidthCurrentComponent);\n      minHeight = Math.min(minHeight, minHeightCurrentComponent);\n      maxNumWide = Math.max(maxNumWide, maxNumWideCurrentComponent);\n      maxNumHigh = Math.max(maxNumHigh, maxNumHighCurrentComponent);\n      sizePerComponent[c] = {\n        resolutions: sizePerResolution,\n        minWidth: minWidthCurrentComponent,\n        minHeight: minHeightCurrentComponent,\n        maxNumWide: maxNumWideCurrentComponent,\n        maxNumHigh: maxNumHighCurrentComponent\n      };\n    }\n    return {\n      components: sizePerComponent,\n      minWidth: minWidth,\n      minHeight: minHeight,\n      maxNumWide: maxNumWide,\n      maxNumHigh: maxNumHigh\n    };\n  }\n  function buildPackets(context) {\n    var siz = context.SIZ;\n    var tileIndex = context.currentTile.index;\n    var tile = context.tiles[tileIndex];\n    var componentsCount = siz.Csiz;\n    for (var c = 0; c < componentsCount; c++) {\n      var component = tile.components[c];\n      var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount;\n      var resolutions = [];\n      var subbands = [];\n      for (var r = 0; r <= decompositionLevelsCount; r++) {\n        var blocksDimensions = getBlocksDimensions(context, component, r);\n        var resolution = {};\n        var scale = 1 << decompositionLevelsCount - r;\n        resolution.trx0 = Math.ceil(component.tcx0 / scale);\n        resolution.try0 = Math.ceil(component.tcy0 / scale);\n        resolution.trx1 = Math.ceil(component.tcx1 / scale);\n        resolution.try1 = Math.ceil(component.tcy1 / scale);\n        resolution.resLevel = r;\n        buildPrecincts(context, resolution, blocksDimensions);\n        resolutions.push(resolution);\n        var subband;\n        if (r === 0) {\n          subband = {};\n          subband.type = 'LL';\n          subband.tbx0 = Math.ceil(component.tcx0 / scale);\n          subband.tby0 = Math.ceil(component.tcy0 / scale);\n          subband.tbx1 = Math.ceil(component.tcx1 / scale);\n          subband.tby1 = Math.ceil(component.tcy1 / scale);\n          subband.resolution = resolution;\n          buildCodeblocks(context, subband, blocksDimensions);\n          subbands.push(subband);\n          resolution.subbands = [subband];\n        } else {\n          var bscale = 1 << decompositionLevelsCount - r + 1;\n          var resolutionSubbands = [];\n          subband = {};\n          subband.type = 'HL';\n          subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5);\n          subband.tby0 = Math.ceil(component.tcy0 / bscale);\n          subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5);\n          subband.tby1 = Math.ceil(component.tcy1 / bscale);\n          subband.resolution = resolution;\n          buildCodeblocks(context, subband, blocksDimensions);\n          subbands.push(subband);\n          resolutionSubbands.push(subband);\n          subband = {};\n          subband.type = 'LH';\n          subband.tbx0 = Math.ceil(component.tcx0 / bscale);\n          subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5);\n          subband.tbx1 = Math.ceil(component.tcx1 / bscale);\n          subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5);\n          subband.resolution = resolution;\n          buildCodeblocks(context, subband, blocksDimensions);\n          subbands.push(subband);\n          resolutionSubbands.push(subband);\n          subband = {};\n          subband.type = 'HH';\n          subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5);\n          subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5);\n          subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5);\n          subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5);\n          subband.resolution = resolution;\n          buildCodeblocks(context, subband, blocksDimensions);\n          subbands.push(subband);\n          resolutionSubbands.push(subband);\n          resolution.subbands = resolutionSubbands;\n        }\n      }\n      component.resolutions = resolutions;\n      component.subbands = subbands;\n    }\n    var progressionOrder = tile.codingStyleDefaultParameters.progressionOrder;\n    switch (progressionOrder) {\n      case 0:\n        tile.packetsIterator = new LayerResolutionComponentPositionIterator(context);\n        break;\n      case 1:\n        tile.packetsIterator = new ResolutionLayerComponentPositionIterator(context);\n        break;\n      case 2:\n        tile.packetsIterator = new ResolutionPositionComponentLayerIterator(context);\n        break;\n      case 3:\n        tile.packetsIterator = new PositionComponentResolutionLayerIterator(context);\n        break;\n      case 4:\n        tile.packetsIterator = new ComponentPositionResolutionLayerIterator(context);\n        break;\n      default:\n        throw new JpxError('Unsupported progression order ' + progressionOrder);\n    }\n  }\n  function parseTilePackets(context, data, offset, dataLength) {\n    var position = 0;\n    var buffer,\n        bufferSize = 0,\n        skipNextBit = false;\n    function readBits(count) {\n      while (bufferSize < count) {\n        var b = data[offset + position];\n        position++;\n        if (skipNextBit) {\n          buffer = buffer << 7 | b;\n          bufferSize += 7;\n          skipNextBit = false;\n        } else {\n          buffer = buffer << 8 | b;\n          bufferSize += 8;\n        }\n        if (b === 0xFF) {\n          skipNextBit = true;\n        }\n      }\n      bufferSize -= count;\n      return buffer >>> bufferSize & (1 << count) - 1;\n    }\n    function skipMarkerIfEqual(value) {\n      if (data[offset + position - 1] === 0xFF && data[offset + position] === value) {\n        skipBytes(1);\n        return true;\n      } else if (data[offset + position] === 0xFF && data[offset + position + 1] === value) {\n        skipBytes(2);\n        return true;\n      }\n      return false;\n    }\n    function skipBytes(count) {\n      position += count;\n    }\n    function alignToByte() {\n      bufferSize = 0;\n      if (skipNextBit) {\n        position++;\n        skipNextBit = false;\n      }\n    }\n    function readCodingpasses() {\n      if (readBits(1) === 0) {\n        return 1;\n      }\n      if (readBits(1) === 0) {\n        return 2;\n      }\n      var value = readBits(2);\n      if (value < 3) {\n        return value + 3;\n      }\n      value = readBits(5);\n      if (value < 31) {\n        return value + 6;\n      }\n      value = readBits(7);\n      return value + 37;\n    }\n    var tileIndex = context.currentTile.index;\n    var tile = context.tiles[tileIndex];\n    var sopMarkerUsed = context.COD.sopMarkerUsed;\n    var ephMarkerUsed = context.COD.ephMarkerUsed;\n    var packetsIterator = tile.packetsIterator;\n    while (position < dataLength) {\n      alignToByte();\n      if (sopMarkerUsed && skipMarkerIfEqual(0x91)) {\n        skipBytes(4);\n      }\n      var packet = packetsIterator.nextPacket();\n      if (!readBits(1)) {\n        continue;\n      }\n      var layerNumber = packet.layerNumber;\n      var queue = [],\n          codeblock;\n      for (var i = 0, ii = packet.codeblocks.length; i < ii; i++) {\n        codeblock = packet.codeblocks[i];\n        var precinct = codeblock.precinct;\n        var codeblockColumn = codeblock.cbx - precinct.cbxMin;\n        var codeblockRow = codeblock.cby - precinct.cbyMin;\n        var codeblockIncluded = false;\n        var firstTimeInclusion = false;\n        var valueReady;\n        if (codeblock['included'] !== undefined) {\n          codeblockIncluded = !!readBits(1);\n        } else {\n          precinct = codeblock.precinct;\n          var inclusionTree, zeroBitPlanesTree;\n          if (precinct['inclusionTree'] !== undefined) {\n            inclusionTree = precinct.inclusionTree;\n          } else {\n            var width = precinct.cbxMax - precinct.cbxMin + 1;\n            var height = precinct.cbyMax - precinct.cbyMin + 1;\n            inclusionTree = new InclusionTree(width, height, layerNumber);\n            zeroBitPlanesTree = new TagTree(width, height);\n            precinct.inclusionTree = inclusionTree;\n            precinct.zeroBitPlanesTree = zeroBitPlanesTree;\n          }\n          if (inclusionTree.reset(codeblockColumn, codeblockRow, layerNumber)) {\n            while (true) {\n              if (readBits(1)) {\n                valueReady = !inclusionTree.nextLevel();\n                if (valueReady) {\n                  codeblock.included = true;\n                  codeblockIncluded = firstTimeInclusion = true;\n                  break;\n                }\n              } else {\n                inclusionTree.incrementValue(layerNumber);\n                break;\n              }\n            }\n          }\n        }\n        if (!codeblockIncluded) {\n          continue;\n        }\n        if (firstTimeInclusion) {\n          zeroBitPlanesTree = precinct.zeroBitPlanesTree;\n          zeroBitPlanesTree.reset(codeblockColumn, codeblockRow);\n          while (true) {\n            if (readBits(1)) {\n              valueReady = !zeroBitPlanesTree.nextLevel();\n              if (valueReady) {\n                break;\n              }\n            } else {\n              zeroBitPlanesTree.incrementValue();\n            }\n          }\n          codeblock.zeroBitPlanes = zeroBitPlanesTree.value;\n        }\n        var codingpasses = readCodingpasses();\n        while (readBits(1)) {\n          codeblock.Lblock++;\n        }\n        var codingpassesLog2 = (0, _util.log2)(codingpasses);\n        var bits = (codingpasses < 1 << codingpassesLog2 ? codingpassesLog2 - 1 : codingpassesLog2) + codeblock.Lblock;\n        var codedDataLength = readBits(bits);\n        queue.push({\n          codeblock: codeblock,\n          codingpasses: codingpasses,\n          dataLength: codedDataLength\n        });\n      }\n      alignToByte();\n      if (ephMarkerUsed) {\n        skipMarkerIfEqual(0x92);\n      }\n      while (queue.length > 0) {\n        var packetItem = queue.shift();\n        codeblock = packetItem.codeblock;\n        if (codeblock['data'] === undefined) {\n          codeblock.data = [];\n        }\n        codeblock.data.push({\n          data: data,\n          start: offset + position,\n          end: offset + position + packetItem.dataLength,\n          codingpasses: packetItem.codingpasses\n        });\n        position += packetItem.dataLength;\n      }\n    }\n    return position;\n  }\n  function copyCoefficients(coefficients, levelWidth, levelHeight, subband, delta, mb, reversible, segmentationSymbolUsed) {\n    var x0 = subband.tbx0;\n    var y0 = subband.tby0;\n    var width = subband.tbx1 - subband.tbx0;\n    var codeblocks = subband.codeblocks;\n    var right = subband.type.charAt(0) === 'H' ? 1 : 0;\n    var bottom = subband.type.charAt(1) === 'H' ? levelWidth : 0;\n    for (var i = 0, ii = codeblocks.length; i < ii; ++i) {\n      var codeblock = codeblocks[i];\n      var blockWidth = codeblock.tbx1_ - codeblock.tbx0_;\n      var blockHeight = codeblock.tby1_ - codeblock.tby0_;\n      if (blockWidth === 0 || blockHeight === 0) {\n        continue;\n      }\n      if (codeblock['data'] === undefined) {\n        continue;\n      }\n      var bitModel, currentCodingpassType;\n      bitModel = new BitModel(blockWidth, blockHeight, codeblock.subbandType, codeblock.zeroBitPlanes, mb);\n      currentCodingpassType = 2;\n      var data = codeblock.data,\n          totalLength = 0,\n          codingpasses = 0;\n      var j, jj, dataItem;\n      for (j = 0, jj = data.length; j < jj; j++) {\n        dataItem = data[j];\n        totalLength += dataItem.end - dataItem.start;\n        codingpasses += dataItem.codingpasses;\n      }\n      var encodedData = new Uint8Array(totalLength);\n      var position = 0;\n      for (j = 0, jj = data.length; j < jj; j++) {\n        dataItem = data[j];\n        var chunk = dataItem.data.subarray(dataItem.start, dataItem.end);\n        encodedData.set(chunk, position);\n        position += chunk.length;\n      }\n      var decoder = new _arithmetic_decoder.ArithmeticDecoder(encodedData, 0, totalLength);\n      bitModel.setDecoder(decoder);\n      for (j = 0; j < codingpasses; j++) {\n        switch (currentCodingpassType) {\n          case 0:\n            bitModel.runSignificancePropagationPass();\n            break;\n          case 1:\n            bitModel.runMagnitudeRefinementPass();\n            break;\n          case 2:\n            bitModel.runCleanupPass();\n            if (segmentationSymbolUsed) {\n              bitModel.checkSegmentationSymbol();\n            }\n            break;\n        }\n        currentCodingpassType = (currentCodingpassType + 1) % 3;\n      }\n      var offset = codeblock.tbx0_ - x0 + (codeblock.tby0_ - y0) * width;\n      var sign = bitModel.coefficentsSign;\n      var magnitude = bitModel.coefficentsMagnitude;\n      var bitsDecoded = bitModel.bitsDecoded;\n      var magnitudeCorrection = reversible ? 0 : 0.5;\n      var k, n, nb;\n      position = 0;\n      var interleave = subband.type !== 'LL';\n      for (j = 0; j < blockHeight; j++) {\n        var row = offset / width | 0;\n        var levelOffset = 2 * row * (levelWidth - width) + right + bottom;\n        for (k = 0; k < blockWidth; k++) {\n          n = magnitude[position];\n          if (n !== 0) {\n            n = (n + magnitudeCorrection) * delta;\n            if (sign[position] !== 0) {\n              n = -n;\n            }\n            nb = bitsDecoded[position];\n            var pos = interleave ? levelOffset + (offset << 1) : offset;\n            if (reversible && nb >= mb) {\n              coefficients[pos] = n;\n            } else {\n              coefficients[pos] = n * (1 << mb - nb);\n            }\n          }\n          offset++;\n          position++;\n        }\n        offset += width - blockWidth;\n      }\n    }\n  }\n  function transformTile(context, tile, c) {\n    var component = tile.components[c];\n    var codingStyleParameters = component.codingStyleParameters;\n    var quantizationParameters = component.quantizationParameters;\n    var decompositionLevelsCount = codingStyleParameters.decompositionLevelsCount;\n    var spqcds = quantizationParameters.SPqcds;\n    var scalarExpounded = quantizationParameters.scalarExpounded;\n    var guardBits = quantizationParameters.guardBits;\n    var segmentationSymbolUsed = codingStyleParameters.segmentationSymbolUsed;\n    var precision = context.components[c].precision;\n    var reversible = codingStyleParameters.reversibleTransformation;\n    var transform = reversible ? new ReversibleTransform() : new IrreversibleTransform();\n    var subbandCoefficients = [];\n    var b = 0;\n    for (var i = 0; i <= decompositionLevelsCount; i++) {\n      var resolution = component.resolutions[i];\n      var width = resolution.trx1 - resolution.trx0;\n      var height = resolution.try1 - resolution.try0;\n      var coefficients = new Float32Array(width * height);\n      for (var j = 0, jj = resolution.subbands.length; j < jj; j++) {\n        var mu, epsilon;\n        if (!scalarExpounded) {\n          mu = spqcds[0].mu;\n          epsilon = spqcds[0].epsilon + (i > 0 ? 1 - i : 0);\n        } else {\n          mu = spqcds[b].mu;\n          epsilon = spqcds[b].epsilon;\n          b++;\n        }\n        var subband = resolution.subbands[j];\n        var gainLog2 = SubbandsGainLog2[subband.type];\n        var delta = reversible ? 1 : Math.pow(2, precision + gainLog2 - epsilon) * (1 + mu / 2048);\n        var mb = guardBits + epsilon - 1;\n        copyCoefficients(coefficients, width, height, subband, delta, mb, reversible, segmentationSymbolUsed);\n      }\n      subbandCoefficients.push({\n        width: width,\n        height: height,\n        items: coefficients\n      });\n    }\n    var result = transform.calculate(subbandCoefficients, component.tcx0, component.tcy0);\n    return {\n      left: component.tcx0,\n      top: component.tcy0,\n      width: result.width,\n      height: result.height,\n      items: result.items\n    };\n  }\n  function transformComponents(context) {\n    var siz = context.SIZ;\n    var components = context.components;\n    var componentsCount = siz.Csiz;\n    var resultImages = [];\n    for (var i = 0, ii = context.tiles.length; i < ii; i++) {\n      var tile = context.tiles[i];\n      var transformedTiles = [];\n      var c;\n      for (c = 0; c < componentsCount; c++) {\n        transformedTiles[c] = transformTile(context, tile, c);\n      }\n      var tile0 = transformedTiles[0];\n      var out = new Uint8ClampedArray(tile0.items.length * componentsCount);\n      var result = {\n        left: tile0.left,\n        top: tile0.top,\n        width: tile0.width,\n        height: tile0.height,\n        items: out\n      };\n      var shift, offset;\n      var pos = 0,\n          j,\n          jj,\n          y0,\n          y1,\n          y2;\n      if (tile.codingStyleDefaultParameters.multipleComponentTransform) {\n        var fourComponents = componentsCount === 4;\n        var y0items = transformedTiles[0].items;\n        var y1items = transformedTiles[1].items;\n        var y2items = transformedTiles[2].items;\n        var y3items = fourComponents ? transformedTiles[3].items : null;\n        shift = components[0].precision - 8;\n        offset = (128 << shift) + 0.5;\n        var component0 = tile.components[0];\n        var alpha01 = componentsCount - 3;\n        jj = y0items.length;\n        if (!component0.codingStyleParameters.reversibleTransformation) {\n          for (j = 0; j < jj; j++, pos += alpha01) {\n            y0 = y0items[j] + offset;\n            y1 = y1items[j];\n            y2 = y2items[j];\n            out[pos++] = y0 + 1.402 * y2 >> shift;\n            out[pos++] = y0 - 0.34413 * y1 - 0.71414 * y2 >> shift;\n            out[pos++] = y0 + 1.772 * y1 >> shift;\n          }\n        } else {\n          for (j = 0; j < jj; j++, pos += alpha01) {\n            y0 = y0items[j] + offset;\n            y1 = y1items[j];\n            y2 = y2items[j];\n            var g = y0 - (y2 + y1 >> 2);\n            out[pos++] = g + y2 >> shift;\n            out[pos++] = g >> shift;\n            out[pos++] = g + y1 >> shift;\n          }\n        }\n        if (fourComponents) {\n          for (j = 0, pos = 3; j < jj; j++, pos += 4) {\n            out[pos] = y3items[j] + offset >> shift;\n          }\n        }\n      } else {\n        for (c = 0; c < componentsCount; c++) {\n          var items = transformedTiles[c].items;\n          shift = components[c].precision - 8;\n          offset = (128 << shift) + 0.5;\n          for (pos = c, j = 0, jj = items.length; j < jj; j++) {\n            out[pos] = items[j] + offset >> shift;\n            pos += componentsCount;\n          }\n        }\n      }\n      resultImages.push(result);\n    }\n    return resultImages;\n  }\n  function initializeTile(context, tileIndex) {\n    var siz = context.SIZ;\n    var componentsCount = siz.Csiz;\n    var tile = context.tiles[tileIndex];\n    for (var c = 0; c < componentsCount; c++) {\n      var component = tile.components[c];\n      var qcdOrQcc = context.currentTile.QCC[c] !== undefined ? context.currentTile.QCC[c] : context.currentTile.QCD;\n      component.quantizationParameters = qcdOrQcc;\n      var codOrCoc = context.currentTile.COC[c] !== undefined ? context.currentTile.COC[c] : context.currentTile.COD;\n      component.codingStyleParameters = codOrCoc;\n    }\n    tile.codingStyleDefaultParameters = context.currentTile.COD;\n  }\n  var TagTree = function TagTreeClosure() {\n    function TagTree(width, height) {\n      var levelsLength = (0, _util.log2)(Math.max(width, height)) + 1;\n      this.levels = [];\n      for (var i = 0; i < levelsLength; i++) {\n        var level = {\n          width: width,\n          height: height,\n          items: []\n        };\n        this.levels.push(level);\n        width = Math.ceil(width / 2);\n        height = Math.ceil(height / 2);\n      }\n    }\n    TagTree.prototype = {\n      reset: function TagTree_reset(i, j) {\n        var currentLevel = 0,\n            value = 0,\n            level;\n        while (currentLevel < this.levels.length) {\n          level = this.levels[currentLevel];\n          var index = i + j * level.width;\n          if (level.items[index] !== undefined) {\n            value = level.items[index];\n            break;\n          }\n          level.index = index;\n          i >>= 1;\n          j >>= 1;\n          currentLevel++;\n        }\n        currentLevel--;\n        level = this.levels[currentLevel];\n        level.items[level.index] = value;\n        this.currentLevel = currentLevel;\n        delete this.value;\n      },\n      incrementValue: function TagTree_incrementValue() {\n        var level = this.levels[this.currentLevel];\n        level.items[level.index]++;\n      },\n      nextLevel: function TagTree_nextLevel() {\n        var currentLevel = this.currentLevel;\n        var level = this.levels[currentLevel];\n        var value = level.items[level.index];\n        currentLevel--;\n        if (currentLevel < 0) {\n          this.value = value;\n          return false;\n        }\n        this.currentLevel = currentLevel;\n        level = this.levels[currentLevel];\n        level.items[level.index] = value;\n        return true;\n      }\n    };\n    return TagTree;\n  }();\n  var InclusionTree = function InclusionTreeClosure() {\n    function InclusionTree(width, height, defaultValue) {\n      var levelsLength = (0, _util.log2)(Math.max(width, height)) + 1;\n      this.levels = [];\n      for (var i = 0; i < levelsLength; i++) {\n        var items = new Uint8Array(width * height);\n        for (var j = 0, jj = items.length; j < jj; j++) {\n          items[j] = defaultValue;\n        }\n        var level = {\n          width: width,\n          height: height,\n          items: items\n        };\n        this.levels.push(level);\n        width = Math.ceil(width / 2);\n        height = Math.ceil(height / 2);\n      }\n    }\n    InclusionTree.prototype = {\n      reset: function InclusionTree_reset(i, j, stopValue) {\n        var currentLevel = 0;\n        while (currentLevel < this.levels.length) {\n          var level = this.levels[currentLevel];\n          var index = i + j * level.width;\n          level.index = index;\n          var value = level.items[index];\n          if (value === 0xFF) {\n            break;\n          }\n          if (value > stopValue) {\n            this.currentLevel = currentLevel;\n            this.propagateValues();\n            return false;\n          }\n          i >>= 1;\n          j >>= 1;\n          currentLevel++;\n        }\n        this.currentLevel = currentLevel - 1;\n        return true;\n      },\n      incrementValue: function InclusionTree_incrementValue(stopValue) {\n        var level = this.levels[this.currentLevel];\n        level.items[level.index] = stopValue + 1;\n        this.propagateValues();\n      },\n      propagateValues: function InclusionTree_propagateValues() {\n        var levelIndex = this.currentLevel;\n        var level = this.levels[levelIndex];\n        var currentValue = level.items[level.index];\n        while (--levelIndex >= 0) {\n          level = this.levels[levelIndex];\n          level.items[level.index] = currentValue;\n        }\n      },\n      nextLevel: function InclusionTree_nextLevel() {\n        var currentLevel = this.currentLevel;\n        var level = this.levels[currentLevel];\n        var value = level.items[level.index];\n        level.items[level.index] = 0xFF;\n        currentLevel--;\n        if (currentLevel < 0) {\n          return false;\n        }\n        this.currentLevel = currentLevel;\n        level = this.levels[currentLevel];\n        level.items[level.index] = value;\n        return true;\n      }\n    };\n    return InclusionTree;\n  }();\n  var BitModel = function BitModelClosure() {\n    var UNIFORM_CONTEXT = 17;\n    var RUNLENGTH_CONTEXT = 18;\n    var LLAndLHContextsLabel = new Uint8Array([0, 5, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 1, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8]);\n    var HLContextLabel = new Uint8Array([0, 3, 4, 0, 5, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 1, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8]);\n    var HHContextLabel = new Uint8Array([0, 1, 2, 0, 1, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 3, 4, 5, 0, 4, 5, 5, 0, 5, 5, 5, 0, 0, 0, 0, 0, 6, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8]);\n    function BitModel(width, height, subband, zeroBitPlanes, mb) {\n      this.width = width;\n      this.height = height;\n      this.contextLabelTable = subband === 'HH' ? HHContextLabel : subband === 'HL' ? HLContextLabel : LLAndLHContextsLabel;\n      var coefficientCount = width * height;\n      this.neighborsSignificance = new Uint8Array(coefficientCount);\n      this.coefficentsSign = new Uint8Array(coefficientCount);\n      this.coefficentsMagnitude = mb > 14 ? new Uint32Array(coefficientCount) : mb > 6 ? new Uint16Array(coefficientCount) : new Uint8Array(coefficientCount);\n      this.processingFlags = new Uint8Array(coefficientCount);\n      var bitsDecoded = new Uint8Array(coefficientCount);\n      if (zeroBitPlanes !== 0) {\n        for (var i = 0; i < coefficientCount; i++) {\n          bitsDecoded[i] = zeroBitPlanes;\n        }\n      }\n      this.bitsDecoded = bitsDecoded;\n      this.reset();\n    }\n    BitModel.prototype = {\n      setDecoder: function BitModel_setDecoder(decoder) {\n        this.decoder = decoder;\n      },\n      reset: function BitModel_reset() {\n        this.contexts = new Int8Array(19);\n        this.contexts[0] = 4 << 1 | 0;\n        this.contexts[UNIFORM_CONTEXT] = 46 << 1 | 0;\n        this.contexts[RUNLENGTH_CONTEXT] = 3 << 1 | 0;\n      },\n      setNeighborsSignificance: function BitModel_setNeighborsSignificance(row, column, index) {\n        var neighborsSignificance = this.neighborsSignificance;\n        var width = this.width,\n            height = this.height;\n        var left = column > 0;\n        var right = column + 1 < width;\n        var i;\n        if (row > 0) {\n          i = index - width;\n          if (left) {\n            neighborsSignificance[i - 1] += 0x10;\n          }\n          if (right) {\n            neighborsSignificance[i + 1] += 0x10;\n          }\n          neighborsSignificance[i] += 0x04;\n        }\n        if (row + 1 < height) {\n          i = index + width;\n          if (left) {\n            neighborsSignificance[i - 1] += 0x10;\n          }\n          if (right) {\n            neighborsSignificance[i + 1] += 0x10;\n          }\n          neighborsSignificance[i] += 0x04;\n        }\n        if (left) {\n          neighborsSignificance[index - 1] += 0x01;\n        }\n        if (right) {\n          neighborsSignificance[index + 1] += 0x01;\n        }\n        neighborsSignificance[index] |= 0x80;\n      },\n      runSignificancePropagationPass: function BitModel_runSignificancePropagationPass() {\n        var decoder = this.decoder;\n        var width = this.width,\n            height = this.height;\n        var coefficentsMagnitude = this.coefficentsMagnitude;\n        var coefficentsSign = this.coefficentsSign;\n        var neighborsSignificance = this.neighborsSignificance;\n        var processingFlags = this.processingFlags;\n        var contexts = this.contexts;\n        var labels = this.contextLabelTable;\n        var bitsDecoded = this.bitsDecoded;\n        var processedInverseMask = ~1;\n        var processedMask = 1;\n        var firstMagnitudeBitMask = 2;\n        for (var i0 = 0; i0 < height; i0 += 4) {\n          for (var j = 0; j < width; j++) {\n            var index = i0 * width + j;\n            for (var i1 = 0; i1 < 4; i1++, index += width) {\n              var i = i0 + i1;\n              if (i >= height) {\n                break;\n              }\n              processingFlags[index] &= processedInverseMask;\n              if (coefficentsMagnitude[index] || !neighborsSignificance[index]) {\n                continue;\n              }\n              var contextLabel = labels[neighborsSignificance[index]];\n              var decision = decoder.readBit(contexts, contextLabel);\n              if (decision) {\n                var sign = this.decodeSignBit(i, j, index);\n                coefficentsSign[index] = sign;\n                coefficentsMagnitude[index] = 1;\n                this.setNeighborsSignificance(i, j, index);\n                processingFlags[index] |= firstMagnitudeBitMask;\n              }\n              bitsDecoded[index]++;\n              processingFlags[index] |= processedMask;\n            }\n          }\n        }\n      },\n      decodeSignBit: function BitModel_decodeSignBit(row, column, index) {\n        var width = this.width,\n            height = this.height;\n        var coefficentsMagnitude = this.coefficentsMagnitude;\n        var coefficentsSign = this.coefficentsSign;\n        var contribution, sign0, sign1, significance1;\n        var contextLabel, decoded;\n        significance1 = column > 0 && coefficentsMagnitude[index - 1] !== 0;\n        if (column + 1 < width && coefficentsMagnitude[index + 1] !== 0) {\n          sign1 = coefficentsSign[index + 1];\n          if (significance1) {\n            sign0 = coefficentsSign[index - 1];\n            contribution = 1 - sign1 - sign0;\n          } else {\n            contribution = 1 - sign1 - sign1;\n          }\n        } else if (significance1) {\n          sign0 = coefficentsSign[index - 1];\n          contribution = 1 - sign0 - sign0;\n        } else {\n          contribution = 0;\n        }\n        var horizontalContribution = 3 * contribution;\n        significance1 = row > 0 && coefficentsMagnitude[index - width] !== 0;\n        if (row + 1 < height && coefficentsMagnitude[index + width] !== 0) {\n          sign1 = coefficentsSign[index + width];\n          if (significance1) {\n            sign0 = coefficentsSign[index - width];\n            contribution = 1 - sign1 - sign0 + horizontalContribution;\n          } else {\n            contribution = 1 - sign1 - sign1 + horizontalContribution;\n          }\n        } else if (significance1) {\n          sign0 = coefficentsSign[index - width];\n          contribution = 1 - sign0 - sign0 + horizontalContribution;\n        } else {\n          contribution = horizontalContribution;\n        }\n        if (contribution >= 0) {\n          contextLabel = 9 + contribution;\n          decoded = this.decoder.readBit(this.contexts, contextLabel);\n        } else {\n          contextLabel = 9 - contribution;\n          decoded = this.decoder.readBit(this.contexts, contextLabel) ^ 1;\n        }\n        return decoded;\n      },\n      runMagnitudeRefinementPass: function BitModel_runMagnitudeRefinementPass() {\n        var decoder = this.decoder;\n        var width = this.width,\n            height = this.height;\n        var coefficentsMagnitude = this.coefficentsMagnitude;\n        var neighborsSignificance = this.neighborsSignificance;\n        var contexts = this.contexts;\n        var bitsDecoded = this.bitsDecoded;\n        var processingFlags = this.processingFlags;\n        var processedMask = 1;\n        var firstMagnitudeBitMask = 2;\n        var length = width * height;\n        var width4 = width * 4;\n        for (var index0 = 0, indexNext; index0 < length; index0 = indexNext) {\n          indexNext = Math.min(length, index0 + width4);\n          for (var j = 0; j < width; j++) {\n            for (var index = index0 + j; index < indexNext; index += width) {\n              if (!coefficentsMagnitude[index] || (processingFlags[index] & processedMask) !== 0) {\n                continue;\n              }\n              var contextLabel = 16;\n              if ((processingFlags[index] & firstMagnitudeBitMask) !== 0) {\n                processingFlags[index] ^= firstMagnitudeBitMask;\n                var significance = neighborsSignificance[index] & 127;\n                contextLabel = significance === 0 ? 15 : 14;\n              }\n              var bit = decoder.readBit(contexts, contextLabel);\n              coefficentsMagnitude[index] = coefficentsMagnitude[index] << 1 | bit;\n              bitsDecoded[index]++;\n              processingFlags[index] |= processedMask;\n            }\n          }\n        }\n      },\n      runCleanupPass: function BitModel_runCleanupPass() {\n        var decoder = this.decoder;\n        var width = this.width,\n            height = this.height;\n        var neighborsSignificance = this.neighborsSignificance;\n        var coefficentsMagnitude = this.coefficentsMagnitude;\n        var coefficentsSign = this.coefficentsSign;\n        var contexts = this.contexts;\n        var labels = this.contextLabelTable;\n        var bitsDecoded = this.bitsDecoded;\n        var processingFlags = this.processingFlags;\n        var processedMask = 1;\n        var firstMagnitudeBitMask = 2;\n        var oneRowDown = width;\n        var twoRowsDown = width * 2;\n        var threeRowsDown = width * 3;\n        var iNext;\n        for (var i0 = 0; i0 < height; i0 = iNext) {\n          iNext = Math.min(i0 + 4, height);\n          var indexBase = i0 * width;\n          var checkAllEmpty = i0 + 3 < height;\n          for (var j = 0; j < width; j++) {\n            var index0 = indexBase + j;\n            var allEmpty = checkAllEmpty && processingFlags[index0] === 0 && processingFlags[index0 + oneRowDown] === 0 && processingFlags[index0 + twoRowsDown] === 0 && processingFlags[index0 + threeRowsDown] === 0 && neighborsSignificance[index0] === 0 && neighborsSignificance[index0 + oneRowDown] === 0 && neighborsSignificance[index0 + twoRowsDown] === 0 && neighborsSignificance[index0 + threeRowsDown] === 0;\n            var i1 = 0,\n                index = index0;\n            var i = i0,\n                sign;\n            if (allEmpty) {\n              var hasSignificantCoefficent = decoder.readBit(contexts, RUNLENGTH_CONTEXT);\n              if (!hasSignificantCoefficent) {\n                bitsDecoded[index0]++;\n                bitsDecoded[index0 + oneRowDown]++;\n                bitsDecoded[index0 + twoRowsDown]++;\n                bitsDecoded[index0 + threeRowsDown]++;\n                continue;\n              }\n              i1 = decoder.readBit(contexts, UNIFORM_CONTEXT) << 1 | decoder.readBit(contexts, UNIFORM_CONTEXT);\n              if (i1 !== 0) {\n                i = i0 + i1;\n                index += i1 * width;\n              }\n              sign = this.decodeSignBit(i, j, index);\n              coefficentsSign[index] = sign;\n              coefficentsMagnitude[index] = 1;\n              this.setNeighborsSignificance(i, j, index);\n              processingFlags[index] |= firstMagnitudeBitMask;\n              index = index0;\n              for (var i2 = i0; i2 <= i; i2++, index += width) {\n                bitsDecoded[index]++;\n              }\n              i1++;\n            }\n            for (i = i0 + i1; i < iNext; i++, index += width) {\n              if (coefficentsMagnitude[index] || (processingFlags[index] & processedMask) !== 0) {\n                continue;\n              }\n              var contextLabel = labels[neighborsSignificance[index]];\n              var decision = decoder.readBit(contexts, contextLabel);\n              if (decision === 1) {\n                sign = this.decodeSignBit(i, j, index);\n                coefficentsSign[index] = sign;\n                coefficentsMagnitude[index] = 1;\n                this.setNeighborsSignificance(i, j, index);\n                processingFlags[index] |= firstMagnitudeBitMask;\n              }\n              bitsDecoded[index]++;\n            }\n          }\n        }\n      },\n      checkSegmentationSymbol: function BitModel_checkSegmentationSymbol() {\n        var decoder = this.decoder;\n        var contexts = this.contexts;\n        var symbol = decoder.readBit(contexts, UNIFORM_CONTEXT) << 3 | decoder.readBit(contexts, UNIFORM_CONTEXT) << 2 | decoder.readBit(contexts, UNIFORM_CONTEXT) << 1 | decoder.readBit(contexts, UNIFORM_CONTEXT);\n        if (symbol !== 0xA) {\n          throw new JpxError('Invalid segmentation symbol');\n        }\n      }\n    };\n    return BitModel;\n  }();\n  var Transform = function TransformClosure() {\n    function Transform() {}\n    Transform.prototype.calculate = function transformCalculate(subbands, u0, v0) {\n      var ll = subbands[0];\n      for (var i = 1, ii = subbands.length; i < ii; i++) {\n        ll = this.iterate(ll, subbands[i], u0, v0);\n      }\n      return ll;\n    };\n    Transform.prototype.extend = function extend(buffer, offset, size) {\n      var i1 = offset - 1,\n          j1 = offset + 1;\n      var i2 = offset + size - 2,\n          j2 = offset + size;\n      buffer[i1--] = buffer[j1++];\n      buffer[j2++] = buffer[i2--];\n      buffer[i1--] = buffer[j1++];\n      buffer[j2++] = buffer[i2--];\n      buffer[i1--] = buffer[j1++];\n      buffer[j2++] = buffer[i2--];\n      buffer[i1] = buffer[j1];\n      buffer[j2] = buffer[i2];\n    };\n    Transform.prototype.iterate = function Transform_iterate(ll, hl_lh_hh, u0, v0) {\n      var llWidth = ll.width,\n          llHeight = ll.height,\n          llItems = ll.items;\n      var width = hl_lh_hh.width;\n      var height = hl_lh_hh.height;\n      var items = hl_lh_hh.items;\n      var i, j, k, l, u, v;\n      for (k = 0, i = 0; i < llHeight; i++) {\n        l = i * 2 * width;\n        for (j = 0; j < llWidth; j++, k++, l += 2) {\n          items[l] = llItems[k];\n        }\n      }\n      llItems = ll.items = null;\n      var bufferPadding = 4;\n      var rowBuffer = new Float32Array(width + 2 * bufferPadding);\n      if (width === 1) {\n        if ((u0 & 1) !== 0) {\n          for (v = 0, k = 0; v < height; v++, k += width) {\n            items[k] *= 0.5;\n          }\n        }\n      } else {\n        for (v = 0, k = 0; v < height; v++, k += width) {\n          rowBuffer.set(items.subarray(k, k + width), bufferPadding);\n          this.extend(rowBuffer, bufferPadding, width);\n          this.filter(rowBuffer, bufferPadding, width);\n          items.set(rowBuffer.subarray(bufferPadding, bufferPadding + width), k);\n        }\n      }\n      var numBuffers = 16;\n      var colBuffers = [];\n      for (i = 0; i < numBuffers; i++) {\n        colBuffers.push(new Float32Array(height + 2 * bufferPadding));\n      }\n      var b,\n          currentBuffer = 0;\n      ll = bufferPadding + height;\n      if (height === 1) {\n        if ((v0 & 1) !== 0) {\n          for (u = 0; u < width; u++) {\n            items[u] *= 0.5;\n          }\n        }\n      } else {\n        for (u = 0; u < width; u++) {\n          if (currentBuffer === 0) {\n            numBuffers = Math.min(width - u, numBuffers);\n            for (k = u, l = bufferPadding; l < ll; k += width, l++) {\n              for (b = 0; b < numBuffers; b++) {\n                colBuffers[b][l] = items[k + b];\n              }\n            }\n            currentBuffer = numBuffers;\n          }\n          currentBuffer--;\n          var buffer = colBuffers[currentBuffer];\n          this.extend(buffer, bufferPadding, height);\n          this.filter(buffer, bufferPadding, height);\n          if (currentBuffer === 0) {\n            k = u - numBuffers + 1;\n            for (l = bufferPadding; l < ll; k += width, l++) {\n              for (b = 0; b < numBuffers; b++) {\n                items[k + b] = colBuffers[b][l];\n              }\n            }\n          }\n        }\n      }\n      return {\n        width: width,\n        height: height,\n        items: items\n      };\n    };\n    return Transform;\n  }();\n  var IrreversibleTransform = function IrreversibleTransformClosure() {\n    function IrreversibleTransform() {\n      Transform.call(this);\n    }\n    IrreversibleTransform.prototype = Object.create(Transform.prototype);\n    IrreversibleTransform.prototype.filter = function irreversibleTransformFilter(x, offset, length) {\n      var len = length >> 1;\n      offset = offset | 0;\n      var j, n, current, next;\n      var alpha = -1.586134342059924;\n      var beta = -0.052980118572961;\n      var gamma = 0.882911075530934;\n      var delta = 0.443506852043971;\n      var K = 1.230174104914001;\n      var K_ = 1 / K;\n      j = offset - 3;\n      for (n = len + 4; n--; j += 2) {\n        x[j] *= K_;\n      }\n      j = offset - 2;\n      current = delta * x[j - 1];\n      for (n = len + 3; n--; j += 2) {\n        next = delta * x[j + 1];\n        x[j] = K * x[j] - current - next;\n        if (n--) {\n          j += 2;\n          current = delta * x[j + 1];\n          x[j] = K * x[j] - current - next;\n        } else {\n          break;\n        }\n      }\n      j = offset - 1;\n      current = gamma * x[j - 1];\n      for (n = len + 2; n--; j += 2) {\n        next = gamma * x[j + 1];\n        x[j] -= current + next;\n        if (n--) {\n          j += 2;\n          current = gamma * x[j + 1];\n          x[j] -= current + next;\n        } else {\n          break;\n        }\n      }\n      j = offset;\n      current = beta * x[j - 1];\n      for (n = len + 1; n--; j += 2) {\n        next = beta * x[j + 1];\n        x[j] -= current + next;\n        if (n--) {\n          j += 2;\n          current = beta * x[j + 1];\n          x[j] -= current + next;\n        } else {\n          break;\n        }\n      }\n      if (len !== 0) {\n        j = offset + 1;\n        current = alpha * x[j - 1];\n        for (n = len; n--; j += 2) {\n          next = alpha * x[j + 1];\n          x[j] -= current + next;\n          if (n--) {\n            j += 2;\n            current = alpha * x[j + 1];\n            x[j] -= current + next;\n          } else {\n            break;\n          }\n        }\n      }\n    };\n    return IrreversibleTransform;\n  }();\n  var ReversibleTransform = function ReversibleTransformClosure() {\n    function ReversibleTransform() {\n      Transform.call(this);\n    }\n    ReversibleTransform.prototype = Object.create(Transform.prototype);\n    ReversibleTransform.prototype.filter = function reversibleTransformFilter(x, offset, length) {\n      var len = length >> 1;\n      offset = offset | 0;\n      var j, n;\n      for (j = offset, n = len + 1; n--; j += 2) {\n        x[j] -= x[j - 1] + x[j + 1] + 2 >> 2;\n      }\n      for (j = offset + 1, n = len; n--; j += 2) {\n        x[j] += x[j - 1] + x[j + 1] >> 1;\n      }\n    };\n    return ReversibleTransform;\n  }();\n  return JpxImage;\n}();\nexports.JpxImage = JpxImage;\n\n/***/ }),\n/* 135 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.calculateSHA512 = exports.calculateSHA384 = exports.calculateSHA256 = exports.calculateMD5 = exports.PDF20 = exports.PDF17 = exports.CipherTransformFactory = exports.ARCFourCipher = exports.AES256Cipher = exports.AES128Cipher = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _primitives = __w_pdfjs_require__(123);\n\nvar _stream = __w_pdfjs_require__(125);\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ARCFourCipher = function ARCFourCipherClosure() {\n  function ARCFourCipher(key) {\n    this.a = 0;\n    this.b = 0;\n    var s = new Uint8Array(256);\n    var i,\n        j = 0,\n        tmp,\n        keyLength = key.length;\n    for (i = 0; i < 256; ++i) {\n      s[i] = i;\n    }\n    for (i = 0; i < 256; ++i) {\n      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  ARCFourCipher.prototype = {\n    encryptBlock: function ARCFourCipher_encryptBlock(data) {\n      var i,\n          n = data.length,\n          tmp,\n          tmp2;\n      var a = this.a,\n          b = this.b,\n          s = this.s;\n      var output = new Uint8Array(n);\n      for (i = 0; i < n; ++i) {\n        a = a + 1 & 0xFF;\n        tmp = s[a];\n        b = b + tmp & 0xFF;\n        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  };\n  ARCFourCipher.prototype.decryptBlock = ARCFourCipher.prototype.encryptBlock;\n  return ARCFourCipher;\n}();\nvar calculateMD5 = function calculateMD5Closure() {\n  var 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  var 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    var h0 = 1732584193,\n        h1 = -271733879,\n        h2 = -1732584194,\n        h3 = 271733878;\n    var paddedLength = length + 72 & ~63;\n    var padded = new Uint8Array(paddedLength);\n    var i, j, n;\n    for (i = 0; i < length; ++i) {\n      padded[i] = data[offset++];\n    }\n    padded[i++] = 0x80;\n    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    var 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      var 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        var 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}();\nvar Word64 = function Word64Closure() {\n  function Word64(highInteger, lowInteger) {\n    this.high = highInteger | 0;\n    this.low = lowInteger | 0;\n  }\n  Word64.prototype = {\n    and: function Word64_and(word) {\n      this.high &= word.high;\n      this.low &= word.low;\n    },\n    xor: function Word64_xor(word) {\n      this.high ^= word.high;\n      this.low ^= word.low;\n    },\n    or: function Word64_or(word) {\n      this.high |= word.high;\n      this.low |= word.low;\n    },\n    shiftRight: function Word64_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: function Word64_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 = this.low << places;\n      }\n    },\n    rotateRight: function Word64_rotateRight(places) {\n      var 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: function Word64_not() {\n      this.high = ~this.high;\n      this.low = ~this.low;\n    },\n    add: function Word64_add(word) {\n      var lowAdd = (this.low >>> 0) + (word.low >>> 0);\n      var 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: function Word64_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: function Word64_assign(word) {\n      this.high = word.high;\n      this.low = word.low;\n    }\n  };\n  return Word64;\n}();\nvar 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  var 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    var h0 = 0x6a09e667,\n        h1 = 0xbb67ae85,\n        h2 = 0x3c6ef372,\n        h3 = 0xa54ff53a,\n        h4 = 0x510e527f,\n        h5 = 0x9b05688c,\n        h6 = 0x1f83d9ab,\n        h7 = 0x5be0cd19;\n    var paddedLength = Math.ceil((length + 9) / 64) * 64;\n    var padded = new Uint8Array(paddedLength);\n    var i, j, n;\n    for (i = 0; i < length; ++i) {\n      padded[i] = data[offset++];\n    }\n    padded[i++] = 0x80;\n    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    var 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      var 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}();\nvar 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  var 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) {\n    mode384 = !!mode384;\n    var 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    var paddedLength = Math.ceil((length + 17) / 128) * 128;\n    var padded = new Uint8Array(paddedLength);\n    var i, j, n;\n    for (i = 0; i < length; ++i) {\n      padded[i] = data[offset++];\n    }\n    padded[i++] = 0x80;\n    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    var w = new Array(80);\n    for (i = 0; i < 80; i++) {\n      w[i] = new Word64(0, 0);\n    }\n    var a = new Word64(0, 0),\n        b = new Word64(0, 0),\n        c = new Word64(0, 0);\n    var d = new Word64(0, 0),\n        e = new Word64(0, 0),\n        f = new Word64(0, 0);\n    var g = new Word64(0, 0),\n        h = new Word64(0, 0);\n    var t1 = new Word64(0, 0),\n        t2 = new Word64(0, 0);\n    var tmp1 = new Word64(0, 0),\n        tmp2 = new Word64(0, 0),\n        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    var 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}();\nvar calculateSHA384 = function calculateSHA384Closure() {\n  function hash(data, offset, length) {\n    return calculateSHA512(data, offset, length, true);\n  }\n  return hash;\n}();\nvar NullCipher = function NullCipherClosure() {\n  function NullCipher() {}\n  NullCipher.prototype = {\n    decryptBlock: function NullCipher_decryptBlock(data) {\n      return data;\n    }\n  };\n  return NullCipher;\n}();\n\nvar AESBaseCipher = function () {\n  function AESBaseCipher() {\n    _classCallCheck(this, AESBaseCipher);\n\n    if (this.constructor === AESBaseCipher) {\n      (0, _util.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 (var i = 0; i < 256; i++) {\n      if (i < 128) {\n        this._mixCol[i] = i << 1;\n      } else {\n        this._mixCol[i] = i << 1 ^ 0x1b;\n      }\n    }\n    this.buffer = new Uint8Array(16);\n    this.bufferPosition = 0;\n  }\n\n  _createClass(AESBaseCipher, [{\n    key: '_expandKey',\n    value: function _expandKey(cipherKey) {\n      (0, _util.unreachable)('Cannot call `_expandKey` on the base class');\n    }\n  }, {\n    key: '_decrypt',\n    value: function _decrypt(input, key) {\n      var t = void 0,\n          u = void 0,\n          v = void 0;\n      var state = new Uint8Array(16);\n      state.set(input);\n      for (var j = 0, k = this._keySize; j < 16; ++j, ++k) {\n        state[j] ^= key[k];\n      }\n      for (var 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 (var _j = 0; _j < 16; ++_j) {\n          state[_j] = this._inv_s[state[_j]];\n        }\n        for (var _j2 = 0, _k = i * 16; _j2 < 16; ++_j2, ++_k) {\n          state[_j2] ^= key[_k];\n        }\n        for (var _j3 = 0; _j3 < 16; _j3 += 4) {\n          var s0 = this._mix[state[_j3]];\n          var s1 = this._mix[state[_j3 + 1]];\n          var s2 = this._mix[state[_j3 + 2]];\n          var s3 = this._mix[state[_j3 + 3]];\n          t = s0 ^ s1 >>> 8 ^ s1 << 24 ^ s2 >>> 16 ^ s2 << 16 ^ s3 >>> 24 ^ s3 << 8;\n          state[_j3] = t >>> 24 & 0xFF;\n          state[_j3 + 1] = t >> 16 & 0xFF;\n          state[_j3 + 2] = t >> 8 & 0xFF;\n          state[_j3 + 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 (var _j4 = 0; _j4 < 16; ++_j4) {\n        state[_j4] = this._inv_s[state[_j4]];\n        state[_j4] ^= key[_j4];\n      }\n      return state;\n    }\n  }, {\n    key: '_encrypt',\n    value: function _encrypt(input, key) {\n      var s = this._s;\n      var t = void 0,\n          u = void 0,\n          v = void 0;\n      var state = new Uint8Array(16);\n      state.set(input);\n      for (var j = 0; j < 16; ++j) {\n        state[j] ^= key[j];\n      }\n      for (var i = 1; i < this._cyclesOfRepetition; i++) {\n        for (var _j5 = 0; _j5 < 16; ++_j5) {\n          state[_j5] = s[state[_j5]];\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 (var _j6 = 0; _j6 < 16; _j6 += 4) {\n          var s0 = state[_j6 + 0];\n          var s1 = state[_j6 + 1];\n          var s2 = state[_j6 + 2];\n          var s3 = state[_j6 + 3];\n          t = s0 ^ s1 ^ s2 ^ s3;\n          state[_j6 + 0] ^= t ^ this._mixCol[s0 ^ s1];\n          state[_j6 + 1] ^= t ^ this._mixCol[s1 ^ s2];\n          state[_j6 + 2] ^= t ^ this._mixCol[s2 ^ s3];\n          state[_j6 + 3] ^= t ^ this._mixCol[s3 ^ s0];\n        }\n        for (var _j7 = 0, k = i * 16; _j7 < 16; ++_j7, ++k) {\n          state[_j7] ^= key[k];\n        }\n      }\n      for (var _j8 = 0; _j8 < 16; ++_j8) {\n        state[_j8] = s[state[_j8]];\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 (var _j9 = 0, _k2 = this._keySize; _j9 < 16; ++_j9, ++_k2) {\n        state[_j9] ^= key[_k2];\n      }\n      return state;\n    }\n  }, {\n    key: '_decryptBlock2',\n    value: function _decryptBlock2(data, finalize) {\n      var sourceLength = data.length;\n      var buffer = this.buffer,\n          bufferLength = this.bufferPosition;\n      var result = [],\n          iv = this.iv;\n      for (var i = 0; i < sourceLength; ++i) {\n        buffer[bufferLength] = data[i];\n        ++bufferLength;\n        if (bufferLength < 16) {\n          continue;\n        }\n        var plain = this._decrypt(buffer, this._key);\n        for (var 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      var outputLength = 16 * result.length;\n      if (finalize) {\n        var lastBlock = result[result.length - 1];\n        var psLen = lastBlock[15];\n        if (psLen <= 16) {\n          for (var _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      var output = new Uint8Array(outputLength);\n      for (var _i2 = 0, _j10 = 0, _ii = result.length; _i2 < _ii; ++_i2, _j10 += 16) {\n        output.set(result[_i2], _j10);\n      }\n      return output;\n    }\n  }, {\n    key: 'decryptBlock',\n    value: function decryptBlock(data, finalize) {\n      var iv = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n      var sourceLength = data.length;\n      var buffer = this.buffer,\n          bufferLength = this.bufferPosition;\n      if (iv) {\n        this.iv = iv;\n      } else {\n        for (var 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  }, {\n    key: 'encrypt',\n    value: function encrypt(data, iv) {\n      var sourceLength = data.length;\n      var buffer = this.buffer,\n          bufferLength = this.bufferPosition;\n      var result = [];\n      if (!iv) {\n        iv = new Uint8Array(16);\n      }\n      for (var i = 0; i < sourceLength; ++i) {\n        buffer[bufferLength] = data[i];\n        ++bufferLength;\n        if (bufferLength < 16) {\n          continue;\n        }\n        for (var j = 0; j < 16; ++j) {\n          buffer[j] ^= iv[j];\n        }\n        var 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      var outputLength = 16 * result.length;\n      var output = new Uint8Array(outputLength);\n      for (var _i3 = 0, _j11 = 0, ii = result.length; _i3 < ii; ++_i3, _j11 += 16) {\n        output.set(result[_i3], _j11);\n      }\n      return output;\n    }\n  }]);\n\n  return AESBaseCipher;\n}();\n\nvar AES128Cipher = function (_AESBaseCipher) {\n  _inherits(AES128Cipher, _AESBaseCipher);\n\n  function AES128Cipher(key) {\n    _classCallCheck(this, AES128Cipher);\n\n    var _this = _possibleConstructorReturn(this, (AES128Cipher.__proto__ || Object.getPrototypeOf(AES128Cipher)).call(this));\n\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    return _this;\n  }\n\n  _createClass(AES128Cipher, [{\n    key: '_expandKey',\n    value: function _expandKey(cipherKey) {\n      var b = 176;\n      var s = this._s;\n      var rcon = this._rcon;\n      var result = new Uint8Array(b);\n      result.set(cipherKey);\n      for (var j = 16, i = 1; j < b; ++i) {\n        var t1 = result[j - 3];\n        var t2 = result[j - 2];\n        var t3 = result[j - 1];\n        var t4 = result[j - 4];\n        t1 = s[t1];\n        t2 = s[t2];\n        t3 = s[t3];\n        t4 = s[t4];\n        t1 = t1 ^ rcon[i];\n        for (var 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  }]);\n\n  return AES128Cipher;\n}(AESBaseCipher);\n\nvar AES256Cipher = function (_AESBaseCipher2) {\n  _inherits(AES256Cipher, _AESBaseCipher2);\n\n  function AES256Cipher(key) {\n    _classCallCheck(this, AES256Cipher);\n\n    var _this2 = _possibleConstructorReturn(this, (AES256Cipher.__proto__ || Object.getPrototypeOf(AES256Cipher)).call(this));\n\n    _this2._cyclesOfRepetition = 14;\n    _this2._keySize = 224;\n    _this2._key = _this2._expandKey(key);\n    return _this2;\n  }\n\n  _createClass(AES256Cipher, [{\n    key: '_expandKey',\n    value: function _expandKey(cipherKey) {\n      var b = 240;\n      var s = this._s;\n      var result = new Uint8Array(b);\n      result.set(cipherKey);\n      var r = 1;\n      var t1 = void 0,\n          t2 = void 0,\n          t3 = void 0,\n          t4 = void 0;\n      for (var 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 = t1 ^ r;\n          if ((r <<= 1) >= 256) {\n            r = (r ^ 0x1b) & 0xFF;\n          }\n        }\n        for (var 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  }]);\n\n  return AES256Cipher;\n}(AESBaseCipher);\n\nvar PDF17 = function PDF17Closure() {\n  function compareByteArrays(array1, array2) {\n    if (array1.length !== array2.length) {\n      return false;\n    }\n    for (var i = 0; i < array1.length; i++) {\n      if (array1[i] !== array2[i]) {\n        return false;\n      }\n    }\n    return true;\n  }\n  function PDF17() {}\n  PDF17.prototype = {\n    checkOwnerPassword: function PDF17_checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) {\n      var 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      var result = calculateSHA256(hashData, 0, hashData.length);\n      return compareByteArrays(result, ownerPassword);\n    },\n    checkUserPassword: function PDF17_checkUserPassword(password, userValidationSalt, userPassword) {\n      var hashData = new Uint8Array(password.length + 8);\n      hashData.set(password, 0);\n      hashData.set(userValidationSalt, password.length);\n      var result = calculateSHA256(hashData, 0, hashData.length);\n      return compareByteArrays(result, userPassword);\n    },\n    getOwnerKey: function PDF17_getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) {\n      var 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      var key = calculateSHA256(hashData, 0, hashData.length);\n      var cipher = new AES256Cipher(key);\n      return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16));\n    },\n    getUserKey: function PDF17_getUserKey(password, userKeySalt, userEncryption) {\n      var hashData = new Uint8Array(password.length + 8);\n      hashData.set(password, 0);\n      hashData.set(userKeySalt, password.length);\n      var key = calculateSHA256(hashData, 0, hashData.length);\n      var cipher = new AES256Cipher(key);\n      return cipher.decryptBlock(userEncryption, false, new Uint8Array(16));\n    }\n  };\n  return PDF17;\n}();\nvar PDF20 = function PDF20Closure() {\n  function concatArrays(array1, array2) {\n    var t = new Uint8Array(array1.length + array2.length);\n    t.set(array1, 0);\n    t.set(array2, array1.length);\n    return t;\n  }\n  function calculatePDF20Hash(password, input, userBytes) {\n    var k = calculateSHA256(input, 0, input.length).subarray(0, 32);\n    var e = [0];\n    var i = 0;\n    while (i < 64 || e[e.length - 1] > i - 32) {\n      var arrayLength = password.length + k.length + userBytes.length;\n      var k1 = new Uint8Array(arrayLength * 64);\n      var array = concatArrays(password, k);\n      array = concatArrays(array, userBytes);\n      for (var j = 0, pos = 0; j < 64; j++, pos += arrayLength) {\n        k1.set(array, pos);\n      }\n      var cipher = new AES128Cipher(k.subarray(0, 16));\n      e = cipher.encrypt(k1, k.subarray(16, 32));\n      var remainder = 0;\n      for (var z = 0; z < 16; z++) {\n        remainder *= 256 % 3;\n        remainder %= 3;\n        remainder += (e[z] >>> 0) % 3;\n        remainder %= 3;\n      }\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  function PDF20() {}\n  function compareByteArrays(array1, array2) {\n    if (array1.length !== array2.length) {\n      return false;\n    }\n    for (var i = 0; i < array1.length; i++) {\n      if (array1[i] !== array2[i]) {\n        return false;\n      }\n    }\n    return true;\n  }\n  PDF20.prototype = {\n    hash: function PDF20_hash(password, concatBytes, userBytes) {\n      return calculatePDF20Hash(password, concatBytes, userBytes);\n    },\n    checkOwnerPassword: function PDF20_checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) {\n      var 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      var result = calculatePDF20Hash(password, hashData, userBytes);\n      return compareByteArrays(result, ownerPassword);\n    },\n    checkUserPassword: function PDF20_checkUserPassword(password, userValidationSalt, userPassword) {\n      var hashData = new Uint8Array(password.length + 8);\n      hashData.set(password, 0);\n      hashData.set(userValidationSalt, password.length);\n      var result = calculatePDF20Hash(password, hashData, []);\n      return compareByteArrays(result, userPassword);\n    },\n    getOwnerKey: function PDF20_getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) {\n      var 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      var key = calculatePDF20Hash(password, hashData, userBytes);\n      var cipher = new AES256Cipher(key);\n      return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16));\n    },\n    getUserKey: function PDF20_getUserKey(password, userKeySalt, userEncryption) {\n      var hashData = new Uint8Array(password.length + 8);\n      hashData.set(password, 0);\n      hashData.set(userKeySalt, password.length);\n      var key = calculatePDF20Hash(password, hashData, []);\n      var cipher = new AES256Cipher(key);\n      return cipher.decryptBlock(userEncryption, false, new Uint8Array(16));\n    }\n  };\n  return PDF20;\n}();\nvar CipherTransform = function CipherTransformClosure() {\n  function CipherTransform(stringCipherConstructor, streamCipherConstructor) {\n    this.StringCipherConstructor = stringCipherConstructor;\n    this.StreamCipherConstructor = streamCipherConstructor;\n  }\n  CipherTransform.prototype = {\n    createStream: function CipherTransform_createStream(stream, length) {\n      var cipher = new this.StreamCipherConstructor();\n      return new _stream.DecryptStream(stream, length, function cipherTransformDecryptStream(data, finalize) {\n        return cipher.decryptBlock(data, finalize);\n      });\n    },\n    decryptString: function CipherTransform_decryptString(s) {\n      var cipher = new this.StringCipherConstructor();\n      var data = (0, _util.stringToBytes)(s);\n      data = cipher.decryptBlock(data, true);\n      return (0, _util.bytesToString)(data);\n    }\n  };\n  return CipherTransform;\n}();\nvar CipherTransformFactory = function CipherTransformFactoryClosure() {\n  var 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  function createEncryptionKey20(revision, password, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption, perms) {\n    if (password) {\n      var passwordLength = Math.min(127, password.length);\n      password = password.subarray(0, passwordLength);\n    } else {\n      password = [];\n    }\n    var pdfAlgorithm;\n    if (revision === 6) {\n      pdfAlgorithm = new PDF20();\n    } else {\n      pdfAlgorithm = new PDF17();\n    }\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  function prepareKeyData(fileId, password, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata) {\n    var hashDataSize = 40 + ownerPassword.length + fileId.length;\n    var hashData = new Uint8Array(hashDataSize),\n        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++] = 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    var hash = calculateMD5(hashData, 0, i);\n    var keyLengthInBytes = keyLength >> 3;\n    if (revision >= 3) {\n      for (j = 0; j < 50; ++j) {\n        hash = calculateMD5(hash, 0, keyLengthInBytes);\n      }\n    }\n    var encryptionKey = hash.subarray(0, keyLengthInBytes);\n    var cipher, checkData;\n    if (revision >= 3) {\n      for (i = 0; i < 32; ++i) {\n        hashData[i] = 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      var derivedKey = new Uint8Array(n),\n          k;\n      for (j = 1; j <= 19; ++j) {\n        for (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(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  function decodeUserPassword(password, ownerPassword, revision, keyLength) {\n    var hashData = new Uint8Array(32),\n        i = 0,\n        j,\n        n;\n    n = Math.min(32, password.length);\n    for (; i < n; ++i) {\n      hashData[i] = password[i];\n    }\n    j = 0;\n    while (i < 32) {\n      hashData[i++] = defaultPasswordBytes[j++];\n    }\n    var hash = calculateMD5(hashData, 0, i);\n    var keyLengthInBytes = keyLength >> 3;\n    if (revision >= 3) {\n      for (j = 0; j < 50; ++j) {\n        hash = calculateMD5(hash, 0, hash.length);\n      }\n    }\n    var cipher, userPassword;\n    if (revision >= 3) {\n      userPassword = ownerPassword;\n      var derivedKey = new Uint8Array(keyLengthInBytes),\n          k;\n      for (j = 19; j >= 0; j--) {\n        for (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  var identityName = _primitives.Name.get('Identity');\n  function CipherTransformFactory(dict, fileId, password) {\n    var filter = dict.get('Filter');\n    if (!(0, _primitives.isName)(filter, 'Standard')) {\n      throw new _util.FormatError('unknown encryption method');\n    }\n    this.dict = dict;\n    var algorithm = dict.get('V');\n    if (!Number.isInteger(algorithm) || algorithm !== 1 && algorithm !== 2 && algorithm !== 4 && algorithm !== 5) {\n      throw new _util.FormatError('unsupported encryption algorithm');\n    }\n    this.algorithm = algorithm;\n    var keyLength = dict.get('Length');\n    if (!keyLength) {\n      if (algorithm <= 3) {\n        keyLength = 40;\n      } else {\n        var cfDict = dict.get('CF');\n        var streamCryptoName = dict.get('StmF');\n        if ((0, _primitives.isDict)(cfDict) && (0, _primitives.isName)(streamCryptoName)) {\n          cfDict.suppressEncryption = true;\n          var handlerDict = cfDict.get(streamCryptoName.name);\n          keyLength = handlerDict && 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 _util.FormatError('invalid key length');\n    }\n    var ownerPassword = (0, _util.stringToBytes)(dict.get('O')).subarray(0, 32);\n    var userPassword = (0, _util.stringToBytes)(dict.get('U')).subarray(0, 32);\n    var flags = dict.get('P');\n    var revision = dict.get('R');\n    var encryptMetadata = (algorithm === 4 || algorithm === 5) && dict.get('EncryptMetadata') !== false;\n    this.encryptMetadata = encryptMetadata;\n    var fileIdBytes = (0, _util.stringToBytes)(fileId);\n    var passwordBytes;\n    if (password) {\n      if (revision === 6) {\n        try {\n          password = (0, _util.utf8StringToString)(password);\n        } catch (ex) {\n          (0, _util.warn)('CipherTransformFactory: ' + 'Unable to convert UTF8 encoded password.');\n        }\n      }\n      passwordBytes = (0, _util.stringToBytes)(password);\n    }\n    var encryptionKey;\n    if (algorithm !== 5) {\n      encryptionKey = prepareKeyData(fileIdBytes, passwordBytes, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata);\n    } else {\n      var ownerValidationSalt = (0, _util.stringToBytes)(dict.get('O')).subarray(32, 40);\n      var ownerKeySalt = (0, _util.stringToBytes)(dict.get('O')).subarray(40, 48);\n      var uBytes = (0, _util.stringToBytes)(dict.get('U')).subarray(0, 48);\n      var userValidationSalt = (0, _util.stringToBytes)(dict.get('U')).subarray(32, 40);\n      var userKeySalt = (0, _util.stringToBytes)(dict.get('U')).subarray(40, 48);\n      var ownerEncryption = (0, _util.stringToBytes)(dict.get('OE'));\n      var userEncryption = (0, _util.stringToBytes)(dict.get('UE'));\n      var perms = (0, _util.stringToBytes)(dict.get('Perms'));\n      encryptionKey = createEncryptionKey20(revision, passwordBytes, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption, perms);\n    }\n    if (!encryptionKey && !password) {\n      throw new _util.PasswordException('No password given', _util.PasswordResponses.NEED_PASSWORD);\n    } else if (!encryptionKey && password) {\n      var decodedPassword = decodeUserPassword(passwordBytes, ownerPassword, revision, keyLength);\n      encryptionKey = prepareKeyData(fileIdBytes, decodedPassword, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata);\n    }\n    if (!encryptionKey) {\n      throw new _util.PasswordException('Incorrect Password', _util.PasswordResponses.INCORRECT_PASSWORD);\n    }\n    this.encryptionKey = encryptionKey;\n    if (algorithm >= 4) {\n      var cf = dict.get('CF');\n      if ((0, _primitives.isDict)(cf)) {\n        cf.suppressEncryption = true;\n      }\n      this.cf = cf;\n      this.stmf = dict.get('StmF') || identityName;\n      this.strf = dict.get('StrF') || identityName;\n      this.eff = dict.get('EFF') || this.stmf;\n    }\n  }\n  function buildObjectKey(num, gen, encryptionKey, isAes) {\n    var key = new Uint8Array(encryptionKey.length + 9),\n        i,\n        n;\n    for (i = 0, n = encryptionKey.length; 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    var hash = calculateMD5(key, 0, i);\n    return hash.subarray(0, Math.min(encryptionKey.length + 5, 16));\n  }\n  function buildCipherConstructor(cf, name, num, gen, key) {\n    if (!(0, _primitives.isName)(name)) {\n      throw new _util.FormatError('Invalid crypt filter name.');\n    }\n    var cryptFilter = cf.get(name.name);\n    var cfm;\n    if (cryptFilter !== null && cryptFilter !== undefined) {\n      cfm = cryptFilter.get('CFM');\n    }\n    if (!cfm || cfm.name === 'None') {\n      return function cipherTransformFactoryBuildCipherConstructorNone() {\n        return new NullCipher();\n      };\n    }\n    if (cfm.name === 'V2') {\n      return function cipherTransformFactoryBuildCipherConstructorV2() {\n        return new ARCFourCipher(buildObjectKey(num, gen, key, false));\n      };\n    }\n    if (cfm.name === 'AESV2') {\n      return function cipherTransformFactoryBuildCipherConstructorAESV2() {\n        return new AES128Cipher(buildObjectKey(num, gen, key, true));\n      };\n    }\n    if (cfm.name === 'AESV3') {\n      return function cipherTransformFactoryBuildCipherConstructorAESV3() {\n        return new AES256Cipher(key);\n      };\n    }\n    throw new _util.FormatError('Unknown crypto method');\n  }\n  CipherTransformFactory.prototype = {\n    createCipherTransform: function CipherTransformFactory_createCipherTransform(num, gen) {\n      if (this.algorithm === 4 || this.algorithm === 5) {\n        return new CipherTransform(buildCipherConstructor(this.cf, this.stmf, num, gen, this.encryptionKey), buildCipherConstructor(this.cf, this.strf, num, gen, this.encryptionKey));\n      }\n      var key = buildObjectKey(num, gen, this.encryptionKey, false);\n      var cipherConstructor = function buildCipherCipherConstructor() {\n        return new ARCFourCipher(key);\n      };\n      return new CipherTransform(cipherConstructor, cipherConstructor);\n    }\n  };\n  return CipherTransformFactory;\n}();\nexports.AES128Cipher = AES128Cipher;\nexports.AES256Cipher = AES256Cipher;\nexports.ARCFourCipher = ARCFourCipher;\nexports.CipherTransformFactory = CipherTransformFactory;\nexports.PDF17 = PDF17;\nexports.PDF20 = PDF20;\nexports.calculateMD5 = calculateMD5;\nexports.calculateSHA256 = calculateSHA256;\nexports.calculateSHA384 = calculateSHA384;\nexports.calculateSHA512 = calculateSHA512;\n\n/***/ }),\n/* 136 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ColorSpace = undefined;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _primitives = __w_pdfjs_require__(123);\n\nvar ColorSpace = function ColorSpaceClosure() {\n  function resizeRgbImage(src, dest, w1, h1, w2, h2, alpha01) {\n    var COMPONENTS = 3;\n    alpha01 = alpha01 !== 1 ? 0 : alpha01;\n    var xRatio = w1 / w2;\n    var yRatio = h1 / h2;\n    var i,\n        j,\n        py,\n        newIndex = 0,\n        oldIndex;\n    var xScaled = new Uint16Array(w2);\n    var w1Scanline = w1 * COMPONENTS;\n    for (i = 0; i < w2; i++) {\n      xScaled[i] = Math.floor(i * xRatio) * COMPONENTS;\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        dest[newIndex++] = src[oldIndex++];\n        dest[newIndex++] = src[oldIndex++];\n        newIndex += alpha01;\n      }\n    }\n  }\n  function ColorSpace() {\n    (0, _util.unreachable)('should not call ColorSpace constructor');\n  }\n  ColorSpace.prototype = {\n    getRgb: function getRgb(src, srcOffset) {\n      var rgb = new Uint8ClampedArray(3);\n      this.getRgbItem(src, srcOffset, rgb, 0);\n      return rgb;\n    },\n    getRgbItem: function getRgbItem(src, srcOffset, dest, destOffset) {\n      (0, _util.unreachable)('Should not call ColorSpace.getRgbItem');\n    },\n    getRgbBuffer: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\n      (0, _util.unreachable)('Should not call ColorSpace.getRgbBuffer');\n    },\n    getOutputLength: function getOutputLength(inputLength, alpha01) {\n      (0, _util.unreachable)('Should not call ColorSpace.getOutputLength');\n    },\n    isPassthrough: function isPassthrough(bits) {\n      return false;\n    },\n    fillRgb: function fillRgb(dest, originalWidth, originalHeight, width, height, actualHeight, bpc, comps, alpha01) {\n      var count = originalWidth * originalHeight;\n      var rgbBuf = null;\n      var numComponentColors = 1 << bpc;\n      var needsResizing = originalHeight !== height || originalWidth !== width;\n      var i, ii;\n      if (this.isPassthrough(bpc)) {\n        rgbBuf = comps;\n      } else if (this.numComps === 1 && count > numComponentColors && this.name !== 'DeviceGray' && this.name !== 'DeviceRGB') {\n        var allColors = bpc <= 8 ? new Uint8Array(numComponentColors) : new Uint16Array(numComponentColors);\n        var key;\n        for (i = 0; i < numComponentColors; i++) {\n          allColors[i] = i;\n        }\n        var colorMap = new Uint8ClampedArray(numComponentColors * 3);\n        this.getRgbBuffer(allColors, 0, numComponentColors, colorMap, 0, bpc, 0);\n        var destPos, rgbPos;\n        if (!needsResizing) {\n          destPos = 0;\n          for (i = 0; i < count; ++i) {\n            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          rgbPos = 0;\n          for (i = 0; i < count; ++i) {\n            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 {\n        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      }\n      if (rgbBuf) {\n        if (needsResizing) {\n          resizeRgbImage(rgbBuf, dest, originalWidth, originalHeight, width, height, alpha01);\n        } else {\n          rgbPos = 0;\n          destPos = 0;\n          for (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\n    usesZeroToOneRange: true\n  };\n  ColorSpace.parse = function (cs, xref, res, pdfFunctionFactory) {\n    var IR = ColorSpace.parseToIR(cs, xref, res, pdfFunctionFactory);\n    return ColorSpace.fromIR(IR);\n  };\n  ColorSpace.fromIR = function (IR) {\n    var name = Array.isArray(IR) ? IR[0] : IR;\n    var whitePoint, blackPoint, gamma;\n    switch (name) {\n      case 'DeviceGrayCS':\n        return this.singletons.gray;\n      case 'DeviceRgbCS':\n        return this.singletons.rgb;\n      case 'DeviceCmykCS':\n        return this.singletons.cmyk;\n      case 'CalGrayCS':\n        whitePoint = IR[1];\n        blackPoint = IR[2];\n        gamma = IR[3];\n        return new CalGrayCS(whitePoint, blackPoint, gamma);\n      case 'CalRGBCS':\n        whitePoint = IR[1];\n        blackPoint = IR[2];\n        gamma = IR[3];\n        var matrix = IR[4];\n        return new CalRGBCS(whitePoint, blackPoint, gamma, matrix);\n      case 'PatternCS':\n        var basePatternCS = IR[1];\n        if (basePatternCS) {\n          basePatternCS = ColorSpace.fromIR(basePatternCS);\n        }\n        return new PatternCS(basePatternCS);\n      case 'IndexedCS':\n        var baseIndexedCS = IR[1];\n        var hiVal = IR[2];\n        var lookup = IR[3];\n        return new IndexedCS(ColorSpace.fromIR(baseIndexedCS), hiVal, lookup);\n      case 'AlternateCS':\n        var numComps = IR[1];\n        var alt = IR[2];\n        var tintFn = IR[3];\n        return new AlternateCS(numComps, ColorSpace.fromIR(alt), tintFn);\n      case 'LabCS':\n        whitePoint = IR[1];\n        blackPoint = IR[2];\n        var range = IR[3];\n        return new LabCS(whitePoint, blackPoint, range);\n      default:\n        throw new _util.FormatError('Unknown colorspace name: ' + name);\n    }\n  };\n  ColorSpace.parseToIR = function (cs, xref) {\n    var res = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n    var pdfFunctionFactory = arguments[3];\n\n    cs = xref.fetchIfRef(cs);\n    if ((0, _primitives.isName)(cs)) {\n      switch (cs.name) {\n        case 'DeviceGray':\n        case 'G':\n          return 'DeviceGrayCS';\n        case 'DeviceRGB':\n        case 'RGB':\n          return 'DeviceRgbCS';\n        case 'DeviceCMYK':\n        case 'CMYK':\n          return 'DeviceCmykCS';\n        case 'Pattern':\n          return ['PatternCS', null];\n        default:\n          if ((0, _primitives.isDict)(res)) {\n            var colorSpaces = res.get('ColorSpace');\n            if ((0, _primitives.isDict)(colorSpaces)) {\n              var resCS = colorSpaces.get(cs.name);\n              if (resCS) {\n                if ((0, _primitives.isName)(resCS)) {\n                  return ColorSpace.parseToIR(resCS, xref, res, pdfFunctionFactory);\n                }\n                cs = resCS;\n                break;\n              }\n            }\n          }\n          throw new _util.FormatError('unrecognized colorspace ' + cs.name);\n      }\n    }\n    if (Array.isArray(cs)) {\n      var mode = xref.fetchIfRef(cs[0]).name;\n      var numComps, params, alt, whitePoint, blackPoint, gamma;\n      switch (mode) {\n        case 'DeviceGray':\n        case 'G':\n          return 'DeviceGrayCS';\n        case 'DeviceRGB':\n        case 'RGB':\n          return 'DeviceRgbCS';\n        case 'DeviceCMYK':\n        case 'CMYK':\n          return 'DeviceCmykCS';\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 ['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          var matrix = params.getArray('Matrix');\n          return ['CalRGBCS', whitePoint, blackPoint, gamma, matrix];\n        case 'ICCBased':\n          var stream = xref.fetchIfRef(cs[1]);\n          var dict = stream.dict;\n          numComps = dict.get('N');\n          alt = dict.get('Alternate');\n          if (alt) {\n            var altIR = ColorSpace.parseToIR(alt, xref, res, pdfFunctionFactory);\n            var altCS = ColorSpace.fromIR(altIR, pdfFunctionFactory);\n            if (altCS.numComps === numComps) {\n              return altIR;\n            }\n            (0, _util.warn)('ICCBased color space: Ignoring incorrect /Alternate entry.');\n          }\n          if (numComps === 1) {\n            return 'DeviceGrayCS';\n          } else if (numComps === 3) {\n            return 'DeviceRgbCS';\n          } else if (numComps === 4) {\n            return 'DeviceCmykCS';\n          }\n          break;\n        case 'Pattern':\n          var basePatternCS = cs[1] || null;\n          if (basePatternCS) {\n            basePatternCS = ColorSpace.parseToIR(basePatternCS, xref, res, pdfFunctionFactory);\n          }\n          return ['PatternCS', basePatternCS];\n        case 'Indexed':\n        case 'I':\n          var baseIndexedCS = ColorSpace.parseToIR(cs[1], xref, res, pdfFunctionFactory);\n          var hiVal = xref.fetchIfRef(cs[2]) + 1;\n          var lookup = xref.fetchIfRef(cs[3]);\n          if ((0, _primitives.isStream)(lookup)) {\n            lookup = lookup.getBytes();\n          }\n          return ['IndexedCS', baseIndexedCS, hiVal, lookup];\n        case 'Separation':\n        case 'DeviceN':\n          var name = xref.fetchIfRef(cs[1]);\n          numComps = Array.isArray(name) ? name.length : 1;\n          alt = ColorSpace.parseToIR(cs[2], xref, res, pdfFunctionFactory);\n          var tintFn = pdfFunctionFactory.create(xref.fetchIfRef(cs[3]));\n          return ['AlternateCS', numComps, alt, tintFn];\n        case 'Lab':\n          params = xref.fetchIfRef(cs[1]);\n          whitePoint = params.getArray('WhitePoint');\n          blackPoint = params.getArray('BlackPoint');\n          var range = params.getArray('Range');\n          return ['LabCS', whitePoint, blackPoint, range];\n        default:\n          throw new _util.FormatError('unimplemented color space object \"' + mode + '\"');\n      }\n    }\n    throw new _util.FormatError('unrecognized color space object: \"' + cs + '\"');\n  };\n  ColorSpace.isDefaultDecode = function (decode, n) {\n    if (!Array.isArray(decode)) {\n      return true;\n    }\n    if (n * 2 !== decode.length) {\n      (0, _util.warn)('The decode map is not the correct length');\n      return true;\n    }\n    for (var 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  ColorSpace.singletons = {\n    get gray() {\n      return (0, _util.shadow)(this, 'gray', new DeviceGrayCS());\n    },\n    get rgb() {\n      return (0, _util.shadow)(this, 'rgb', new DeviceRgbCS());\n    },\n    get cmyk() {\n      return (0, _util.shadow)(this, 'cmyk', new DeviceCmykCS());\n    }\n  };\n  return ColorSpace;\n}();\nvar AlternateCS = function AlternateCSClosure() {\n  function AlternateCS(numComps, base, tintFn) {\n    this.name = 'Alternate';\n    this.numComps = numComps;\n    this.defaultColor = new Float32Array(numComps);\n    for (var i = 0; i < numComps; ++i) {\n      this.defaultColor[i] = 1;\n    }\n    this.base = base;\n    this.tintFn = tintFn;\n    this.tmpBuf = new Float32Array(base.numComps);\n  }\n  AlternateCS.prototype = {\n    getRgb: ColorSpace.prototype.getRgb,\n    getRgbItem: function getRgbItem(src, srcOffset, dest, destOffset) {\n      var tmpBuf = this.tmpBuf;\n      this.tintFn(src, srcOffset, tmpBuf, 0);\n      this.base.getRgbItem(tmpBuf, 0, dest, destOffset);\n    },\n    getRgbBuffer: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\n      var tintFn = this.tintFn;\n      var base = this.base;\n      var scale = 1 / ((1 << bits) - 1);\n      var baseNumComps = base.numComps;\n      var usesZeroToOneRange = base.usesZeroToOneRange;\n      var isPassthrough = (base.isPassthrough(8) || !usesZeroToOneRange) && alpha01 === 0;\n      var pos = isPassthrough ? destOffset : 0;\n      var baseBuf = isPassthrough ? dest : new Uint8ClampedArray(baseNumComps * count);\n      var numComps = this.numComps;\n      var scaled = new Float32Array(numComps);\n      var tinted = new Float32Array(baseNumComps);\n      var 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: function getOutputLength(inputLength, alpha01) {\n      return this.base.getOutputLength(inputLength * this.base.numComps / this.numComps, alpha01);\n    },\n\n    isPassthrough: ColorSpace.prototype.isPassthrough,\n    fillRgb: ColorSpace.prototype.fillRgb,\n    isDefaultDecode: function isDefaultDecode(decodeMap) {\n      return ColorSpace.isDefaultDecode(decodeMap, this.numComps);\n    },\n\n    usesZeroToOneRange: true\n  };\n  return AlternateCS;\n}();\nvar PatternCS = function PatternCSClosure() {\n  function PatternCS(baseCS) {\n    this.name = 'Pattern';\n    this.base = baseCS;\n  }\n  PatternCS.prototype = {};\n  return PatternCS;\n}();\nvar IndexedCS = function IndexedCSClosure() {\n  function IndexedCS(base, highVal, lookup) {\n    this.name = 'Indexed';\n    this.numComps = 1;\n    this.defaultColor = new Uint8Array(this.numComps);\n    this.base = base;\n    this.highVal = highVal;\n    var baseNumComps = base.numComps;\n    var length = baseNumComps * highVal;\n    if ((0, _primitives.isStream)(lookup)) {\n      this.lookup = new Uint8Array(length);\n      var bytes = lookup.getBytes(length);\n      this.lookup.set(bytes);\n    } else if ((0, _util.isString)(lookup)) {\n      this.lookup = new Uint8Array(length);\n      for (var i = 0; i < length; ++i) {\n        this.lookup[i] = lookup.charCodeAt(i);\n      }\n    } else if (lookup instanceof Uint8Array) {\n      this.lookup = lookup;\n    } else {\n      throw new _util.FormatError('Unrecognized lookup table: ' + lookup);\n    }\n  }\n  IndexedCS.prototype = {\n    getRgb: ColorSpace.prototype.getRgb,\n    getRgbItem: function getRgbItem(src, srcOffset, dest, destOffset) {\n      var numComps = this.base.numComps;\n      var start = src[srcOffset] * numComps;\n      this.base.getRgbBuffer(this.lookup, start, 1, dest, destOffset, 8, 0);\n    },\n    getRgbBuffer: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\n      var base = this.base;\n      var numComps = base.numComps;\n      var outputDelta = base.getOutputLength(numComps, alpha01);\n      var lookup = this.lookup;\n      for (var i = 0; i < count; ++i) {\n        var lookupPos = src[srcOffset++] * numComps;\n        base.getRgbBuffer(lookup, lookupPos, 1, dest, destOffset, 8, alpha01);\n        destOffset += outputDelta;\n      }\n    },\n    getOutputLength: function getOutputLength(inputLength, alpha01) {\n      return this.base.getOutputLength(inputLength * this.base.numComps, alpha01);\n    },\n\n    isPassthrough: ColorSpace.prototype.isPassthrough,\n    fillRgb: ColorSpace.prototype.fillRgb,\n    isDefaultDecode: function isDefaultDecode(decodeMap) {\n      return true;\n    },\n\n    usesZeroToOneRange: true\n  };\n  return IndexedCS;\n}();\nvar DeviceGrayCS = function DeviceGrayCSClosure() {\n  function DeviceGrayCS() {\n    this.name = 'DeviceGray';\n    this.numComps = 1;\n    this.defaultColor = new Float32Array(this.numComps);\n  }\n  DeviceGrayCS.prototype = {\n    getRgb: ColorSpace.prototype.getRgb,\n    getRgbItem: function getRgbItem(src, srcOffset, dest, destOffset) {\n      var c = src[srcOffset] * 255;\n      dest[destOffset] = dest[destOffset + 1] = dest[destOffset + 2] = c;\n    },\n    getRgbBuffer: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\n      var scale = 255 / ((1 << bits) - 1);\n      var j = srcOffset,\n          q = destOffset;\n      for (var i = 0; i < count; ++i) {\n        var c = scale * src[j++];\n        dest[q++] = c;\n        dest[q++] = c;\n        dest[q++] = c;\n        q += alpha01;\n      }\n    },\n    getOutputLength: function getOutputLength(inputLength, alpha01) {\n      return inputLength * (3 + alpha01);\n    },\n\n    isPassthrough: ColorSpace.prototype.isPassthrough,\n    fillRgb: ColorSpace.prototype.fillRgb,\n    isDefaultDecode: function isDefaultDecode(decodeMap) {\n      return ColorSpace.isDefaultDecode(decodeMap, this.numComps);\n    },\n\n    usesZeroToOneRange: true\n  };\n  return DeviceGrayCS;\n}();\nvar DeviceRgbCS = function DeviceRgbCSClosure() {\n  function DeviceRgbCS() {\n    this.name = 'DeviceRGB';\n    this.numComps = 3;\n    this.defaultColor = new Float32Array(this.numComps);\n  }\n  DeviceRgbCS.prototype = {\n    getRgb: ColorSpace.prototype.getRgb,\n    getRgbItem: function 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: function 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      var scale = 255 / ((1 << bits) - 1);\n      var j = srcOffset,\n          q = destOffset;\n      for (var 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: function getOutputLength(inputLength, alpha01) {\n      return inputLength * (3 + alpha01) / 3 | 0;\n    },\n    isPassthrough: function isPassthrough(bits) {\n      return bits === 8;\n    },\n\n    fillRgb: ColorSpace.prototype.fillRgb,\n    isDefaultDecode: function isDefaultDecode(decodeMap) {\n      return ColorSpace.isDefaultDecode(decodeMap, this.numComps);\n    },\n\n    usesZeroToOneRange: true\n  };\n  return DeviceRgbCS;\n}();\nvar DeviceCmykCS = function DeviceCmykCSClosure() {\n  function convertToRgb(src, srcOffset, srcScale, dest, destOffset) {\n    var c = src[srcOffset] * srcScale;\n    var m = src[srcOffset + 1] * srcScale;\n    var y = src[srcOffset + 2] * srcScale;\n    var 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  function DeviceCmykCS() {\n    this.name = 'DeviceCMYK';\n    this.numComps = 4;\n    this.defaultColor = new Float32Array(this.numComps);\n    this.defaultColor[3] = 1;\n  }\n  DeviceCmykCS.prototype = {\n    getRgb: ColorSpace.prototype.getRgb,\n    getRgbItem: function getRgbItem(src, srcOffset, dest, destOffset) {\n      convertToRgb(src, srcOffset, 1, dest, destOffset);\n    },\n    getRgbBuffer: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\n      var scale = 1 / ((1 << bits) - 1);\n      for (var i = 0; i < count; i++) {\n        convertToRgb(src, srcOffset, scale, dest, destOffset);\n        srcOffset += 4;\n        destOffset += 3 + alpha01;\n      }\n    },\n    getOutputLength: function getOutputLength(inputLength, alpha01) {\n      return inputLength / 4 * (3 + alpha01) | 0;\n    },\n\n    isPassthrough: ColorSpace.prototype.isPassthrough,\n    fillRgb: ColorSpace.prototype.fillRgb,\n    isDefaultDecode: function isDefaultDecode(decodeMap) {\n      return ColorSpace.isDefaultDecode(decodeMap, this.numComps);\n    },\n\n    usesZeroToOneRange: true\n  };\n  return DeviceCmykCS;\n}();\nvar CalGrayCS = function CalGrayCSClosure() {\n  function CalGrayCS(whitePoint, blackPoint, gamma) {\n    this.name = 'CalGray';\n    this.numComps = 1;\n    this.defaultColor = new Float32Array(this.numComps);\n    if (!whitePoint) {\n      throw new _util.FormatError('WhitePoint missing - required for color space CalGray');\n    }\n    blackPoint = blackPoint || [0, 0, 0];\n    gamma = gamma || 1;\n    this.XW = whitePoint[0];\n    this.YW = whitePoint[1];\n    this.ZW = whitePoint[2];\n    this.XB = blackPoint[0];\n    this.YB = blackPoint[1];\n    this.ZB = blackPoint[2];\n    this.G = gamma;\n    if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) {\n      throw new _util.FormatError('Invalid WhitePoint components for ' + this.name + ', no fallback available');\n    }\n    if (this.XB < 0 || this.YB < 0 || this.ZB < 0) {\n      (0, _util.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      (0, _util.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      (0, _util.info)('Invalid Gamma: ' + this.G + ' for ' + this.name + ', falling back to default');\n      this.G = 1;\n    }\n  }\n  function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) {\n    var A = src[srcOffset] * scale;\n    var AG = Math.pow(A, cs.G);\n    var L = cs.YW * AG;\n    var val = Math.max(295.8 * Math.pow(L, 0.333333333333333333) - 40.8, 0);\n    dest[destOffset] = val;\n    dest[destOffset + 1] = val;\n    dest[destOffset + 2] = val;\n  }\n  CalGrayCS.prototype = {\n    getRgb: ColorSpace.prototype.getRgb,\n    getRgbItem: function getRgbItem(src, srcOffset, dest, destOffset) {\n      convertToRgb(this, src, srcOffset, dest, destOffset, 1);\n    },\n    getRgbBuffer: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\n      var scale = 1 / ((1 << bits) - 1);\n      for (var i = 0; i < count; ++i) {\n        convertToRgb(this, src, srcOffset, dest, destOffset, scale);\n        srcOffset += 1;\n        destOffset += 3 + alpha01;\n      }\n    },\n    getOutputLength: function getOutputLength(inputLength, alpha01) {\n      return inputLength * (3 + alpha01);\n    },\n\n    isPassthrough: ColorSpace.prototype.isPassthrough,\n    fillRgb: ColorSpace.prototype.fillRgb,\n    isDefaultDecode: function isDefaultDecode(decodeMap) {\n      return ColorSpace.isDefaultDecode(decodeMap, this.numComps);\n    },\n\n    usesZeroToOneRange: true\n  };\n  return CalGrayCS;\n}();\nvar CalRGBCS = function CalRGBCSClosure() {\n  var BRADFORD_SCALE_MATRIX = new Float32Array([0.8951, 0.2664, -0.1614, -0.7502, 1.7135, 0.0367, 0.0389, -0.0685, 1.0296]);\n  var 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  var 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  var FLAT_WHITEPOINT_MATRIX = new Float32Array([1, 1, 1]);\n  var tempNormalizeMatrix = new Float32Array(3);\n  var tempConvertMatrix1 = new Float32Array(3);\n  var tempConvertMatrix2 = new Float32Array(3);\n  var DECODE_L_CONSTANT = Math.pow((8 + 16) / 116, 3) / 8.0;\n  function CalRGBCS(whitePoint, blackPoint, gamma, matrix) {\n    this.name = 'CalRGB';\n    this.numComps = 3;\n    this.defaultColor = new Float32Array(this.numComps);\n    if (!whitePoint) {\n      throw new _util.FormatError('WhitePoint missing - required for color space CalRGB');\n    }\n    blackPoint = blackPoint || new Float32Array(3);\n    gamma = gamma || new Float32Array([1, 1, 1]);\n    matrix = matrix || new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]);\n    var XW = whitePoint[0];\n    var YW = whitePoint[1];\n    var ZW = whitePoint[2];\n    this.whitePoint = whitePoint;\n    var XB = blackPoint[0];\n    var YB = blackPoint[1];\n    var ZB = blackPoint[2];\n    this.blackPoint = blackPoint;\n    this.GR = gamma[0];\n    this.GG = gamma[1];\n    this.GB = gamma[2];\n    this.MXA = matrix[0];\n    this.MYA = matrix[1];\n    this.MZA = matrix[2];\n    this.MXB = matrix[3];\n    this.MYB = matrix[4];\n    this.MZB = matrix[5];\n    this.MXC = matrix[6];\n    this.MYC = matrix[7];\n    this.MZC = matrix[8];\n    if (XW < 0 || ZW < 0 || YW !== 1) {\n      throw new _util.FormatError('Invalid WhitePoint components for ' + this.name + ', no fallback available');\n    }\n    if (XB < 0 || YB < 0 || ZB < 0) {\n      (0, _util.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      (0, _util.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  function 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  function convertToFlat(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  function convertToD65(sourceWhitePoint, LMS, result) {\n    var D65X = 0.95047;\n    var D65Y = 1;\n    var 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  function sRGBTransferFunction(color) {\n    if (color <= 0.0031308) {\n      return adjustToRange(0, 1, 12.92 * color);\n    }\n    return adjustToRange(0, 1, (1 + 0.055) * Math.pow(color, 1 / 2.4) - 0.055);\n  }\n  function adjustToRange(min, max, value) {\n    return Math.max(min, Math.min(max, value));\n  }\n  function decodeL(L) {\n    if (L < 0) {\n      return -decodeL(-L);\n    }\n    if (L > 8.0) {\n      return Math.pow((L + 16) / 116, 3);\n    }\n    return L * DECODE_L_CONSTANT;\n  }\n  function 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    var zeroDecodeL = decodeL(0);\n    var X_DST = zeroDecodeL;\n    var X_SRC = decodeL(sourceBlackPoint[0]);\n    var Y_DST = zeroDecodeL;\n    var Y_SRC = decodeL(sourceBlackPoint[1]);\n    var Z_DST = zeroDecodeL;\n    var Z_SRC = decodeL(sourceBlackPoint[2]);\n    var X_Scale = (1 - X_DST) / (1 - X_SRC);\n    var X_Offset = 1 - X_Scale;\n    var Y_Scale = (1 - Y_DST) / (1 - Y_SRC);\n    var Y_Offset = 1 - Y_Scale;\n    var Z_Scale = (1 - Z_DST) / (1 - Z_SRC);\n    var 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  function 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    var LMS = result;\n    matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS);\n    var LMS_Flat = tempNormalizeMatrix;\n    convertToFlat(sourceWhitePoint, LMS, LMS_Flat);\n    matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_Flat, result);\n  }\n  function normalizeWhitePointToD65(sourceWhitePoint, XYZ_In, result) {\n    var LMS = result;\n    matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS);\n    var LMS_D65 = tempNormalizeMatrix;\n    convertToD65(sourceWhitePoint, LMS, LMS_D65);\n    matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_D65, result);\n  }\n  function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) {\n    var A = adjustToRange(0, 1, src[srcOffset] * scale);\n    var B = adjustToRange(0, 1, src[srcOffset + 1] * scale);\n    var C = adjustToRange(0, 1, src[srcOffset + 2] * scale);\n    var AGR = Math.pow(A, cs.GR);\n    var BGG = Math.pow(B, cs.GG);\n    var CGB = Math.pow(C, cs.GB);\n    var X = cs.MXA * AGR + cs.MXB * BGG + cs.MXC * CGB;\n    var Y = cs.MYA * AGR + cs.MYB * BGG + cs.MYC * CGB;\n    var Z = cs.MZA * AGR + cs.MZB * BGG + cs.MZC * CGB;\n    var XYZ = tempConvertMatrix1;\n    XYZ[0] = X;\n    XYZ[1] = Y;\n    XYZ[2] = Z;\n    var XYZ_Flat = tempConvertMatrix2;\n    normalizeWhitePointToFlat(cs.whitePoint, XYZ, XYZ_Flat);\n    var XYZ_Black = tempConvertMatrix1;\n    compensateBlackPoint(cs.blackPoint, XYZ_Flat, XYZ_Black);\n    var XYZ_D65 = tempConvertMatrix2;\n    normalizeWhitePointToD65(FLAT_WHITEPOINT_MATRIX, XYZ_Black, XYZ_D65);\n    var SRGB = tempConvertMatrix1;\n    matrixProduct(SRGB_D65_XYZ_TO_RGB_MATRIX, XYZ_D65, SRGB);\n    dest[destOffset] = sRGBTransferFunction(SRGB[0]) * 255;\n    dest[destOffset + 1] = sRGBTransferFunction(SRGB[1]) * 255;\n    dest[destOffset + 2] = sRGBTransferFunction(SRGB[2]) * 255;\n  }\n  CalRGBCS.prototype = {\n    getRgb: ColorSpace.prototype.getRgb,\n    getRgbItem: function getRgbItem(src, srcOffset, dest, destOffset) {\n      convertToRgb(this, src, srcOffset, dest, destOffset, 1);\n    },\n    getRgbBuffer: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\n      var scale = 1 / ((1 << bits) - 1);\n      for (var i = 0; i < count; ++i) {\n        convertToRgb(this, src, srcOffset, dest, destOffset, scale);\n        srcOffset += 3;\n        destOffset += 3 + alpha01;\n      }\n    },\n    getOutputLength: function getOutputLength(inputLength, alpha01) {\n      return inputLength * (3 + alpha01) / 3 | 0;\n    },\n\n    isPassthrough: ColorSpace.prototype.isPassthrough,\n    fillRgb: ColorSpace.prototype.fillRgb,\n    isDefaultDecode: function isDefaultDecode(decodeMap) {\n      return ColorSpace.isDefaultDecode(decodeMap, this.numComps);\n    },\n\n    usesZeroToOneRange: true\n  };\n  return CalRGBCS;\n}();\nvar LabCS = function LabCSClosure() {\n  function LabCS(whitePoint, blackPoint, range) {\n    this.name = 'Lab';\n    this.numComps = 3;\n    this.defaultColor = new Float32Array(this.numComps);\n    if (!whitePoint) {\n      throw new _util.FormatError('WhitePoint missing - required for color space Lab');\n    }\n    blackPoint = blackPoint || [0, 0, 0];\n    range = range || [-100, 100, -100, 100];\n    this.XW = whitePoint[0];\n    this.YW = whitePoint[1];\n    this.ZW = whitePoint[2];\n    this.amin = range[0];\n    this.amax = range[1];\n    this.bmin = range[2];\n    this.bmax = range[3];\n    this.XB = blackPoint[0];\n    this.YB = blackPoint[1];\n    this.ZB = blackPoint[2];\n    if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) {\n      throw new _util.FormatError('Invalid WhitePoint components, no fallback available');\n    }\n    if (this.XB < 0 || this.YB < 0 || this.ZB < 0) {\n      (0, _util.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      (0, _util.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  function fn_g(x) {\n    var result;\n    if (x >= 6 / 29) {\n      result = x * x * x;\n    } else {\n      result = 108 / 841 * (x - 4 / 29);\n    }\n    return result;\n  }\n  function decode(value, high1, low2, high2) {\n    return low2 + value * (high2 - low2) / high1;\n  }\n  function convertToRgb(cs, src, srcOffset, maxVal, dest, destOffset) {\n    var Ls = src[srcOffset];\n    var as = src[srcOffset + 1];\n    var bs = src[srcOffset + 2];\n    if (maxVal !== false) {\n      Ls = decode(Ls, maxVal, 0, 100);\n      as = decode(as, maxVal, cs.amin, cs.amax);\n      bs = decode(bs, maxVal, cs.bmin, cs.bmax);\n    }\n    as = as > cs.amax ? cs.amax : as < cs.amin ? cs.amin : as;\n    bs = bs > cs.bmax ? cs.bmax : bs < cs.bmin ? cs.bmin : bs;\n    var M = (Ls + 16) / 116;\n    var L = M + as / 500;\n    var N = M - bs / 200;\n    var X = cs.XW * fn_g(L);\n    var Y = cs.YW * fn_g(M);\n    var Z = cs.ZW * fn_g(N);\n    var r, g, b;\n    if (cs.ZW < 1) {\n      r = X * 3.1339 + Y * -1.6170 + Z * -0.4906;\n      g = X * -0.9785 + Y * 1.9160 + Z * 0.0333;\n      b = X * 0.0720 + Y * -0.2290 + 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.2040 + Z * 1.0570;\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  LabCS.prototype = {\n    getRgb: ColorSpace.prototype.getRgb,\n    getRgbItem: function getRgbItem(src, srcOffset, dest, destOffset) {\n      convertToRgb(this, src, srcOffset, false, dest, destOffset);\n    },\n    getRgbBuffer: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\n      var maxVal = (1 << bits) - 1;\n      for (var i = 0; i < count; i++) {\n        convertToRgb(this, src, srcOffset, maxVal, dest, destOffset);\n        srcOffset += 3;\n        destOffset += 3 + alpha01;\n      }\n    },\n    getOutputLength: function getOutputLength(inputLength, alpha01) {\n      return inputLength * (3 + alpha01) / 3 | 0;\n    },\n\n    isPassthrough: ColorSpace.prototype.isPassthrough,\n    fillRgb: ColorSpace.prototype.fillRgb,\n    isDefaultDecode: function isDefaultDecode(decodeMap) {\n      return true;\n    },\n\n    usesZeroToOneRange: false\n  };\n  return LabCS;\n}();\nexports.ColorSpace = ColorSpace;\n\n/***/ }),\n/* 137 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.AnnotationFactory = exports.AnnotationBorderStyle = exports.Annotation = undefined;\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _obj = __w_pdfjs_require__(122);\n\nvar _primitives = __w_pdfjs_require__(123);\n\nvar _colorspace = __w_pdfjs_require__(136);\n\nvar _operator_list = __w_pdfjs_require__(138);\n\nvar _stream = __w_pdfjs_require__(125);\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar AnnotationFactory = function () {\n  function AnnotationFactory() {\n    _classCallCheck(this, AnnotationFactory);\n  }\n\n  _createClass(AnnotationFactory, null, [{\n    key: 'create',\n    value: function create(xref, ref, pdfManager, idFactory) {\n      var dict = xref.fetchIfRef(ref);\n      if (!(0, _primitives.isDict)(dict)) {\n        return;\n      }\n      var id = (0, _primitives.isRef)(ref) ? ref.toString() : 'annot_' + idFactory.createObjId();\n      var subtype = dict.get('Subtype');\n      subtype = (0, _primitives.isName)(subtype) ? subtype.name : null;\n      var parameters = {\n        xref: xref,\n        dict: dict,\n        ref: (0, _primitives.isRef)(ref) ? ref : null,\n        subtype: subtype,\n        id: id,\n        pdfManager: pdfManager\n      };\n      switch (subtype) {\n        case 'Link':\n          return new LinkAnnotation(parameters);\n        case 'Text':\n          return new TextAnnotation(parameters);\n        case 'Widget':\n          var fieldType = (0, _util.getInheritableProperty)({\n            dict: dict,\n            key: 'FT'\n          });\n          fieldType = (0, _primitives.isName)(fieldType) ? 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          }\n          (0, _util.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 '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 '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 (!subtype) {\n            (0, _util.warn)('Annotation is missing the required /Subtype.');\n          } else {\n            (0, _util.warn)('Unimplemented annotation type \"' + subtype + '\", ' + 'falling back to base annotation.');\n          }\n          return new Annotation(parameters);\n      }\n    }\n  }]);\n\n  return AnnotationFactory;\n}();\n\nfunction getTransformMatrix(rect, bbox, matrix) {\n  var bounds = _util.Util.getAxialAlignedBoundingBox(bbox, matrix);\n  var minX = bounds[0];\n  var minY = bounds[1];\n  var maxX = bounds[2];\n  var maxY = bounds[3];\n  if (minX === maxX || minY === maxY) {\n    return [1, 0, 0, 1, rect[0], rect[1]];\n  }\n  var xRatio = (rect[2] - rect[0]) / (maxX - minX);\n  var yRatio = (rect[3] - rect[1]) / (maxY - minY);\n  return [xRatio, 0, 0, yRatio, rect[0] - minX * xRatio, rect[1] - minY * yRatio];\n}\n\nvar Annotation = function () {\n  function Annotation(params) {\n    _classCallCheck(this, Annotation);\n\n    var dict = params.dict;\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.data = {\n      annotationFlags: this.flags,\n      borderStyle: this.borderStyle,\n      color: this.color,\n      hasAppearance: !!this.appearance,\n      id: params.id,\n      rect: this.rectangle,\n      subtype: params.subtype\n    };\n  }\n\n  _createClass(Annotation, [{\n    key: '_hasFlag',\n    value: function _hasFlag(flags, flag) {\n      return !!(flags & flag);\n    }\n  }, {\n    key: '_isViewable',\n    value: function _isViewable(flags) {\n      return !this._hasFlag(flags, _util.AnnotationFlag.INVISIBLE) && !this._hasFlag(flags, _util.AnnotationFlag.HIDDEN) && !this._hasFlag(flags, _util.AnnotationFlag.NOVIEW);\n    }\n  }, {\n    key: '_isPrintable',\n    value: function _isPrintable(flags) {\n      return this._hasFlag(flags, _util.AnnotationFlag.PRINT) && !this._hasFlag(flags, _util.AnnotationFlag.INVISIBLE) && !this._hasFlag(flags, _util.AnnotationFlag.HIDDEN);\n    }\n  }, {\n    key: 'setFlags',\n    value: function setFlags(flags) {\n      this.flags = Number.isInteger(flags) && flags > 0 ? flags : 0;\n    }\n  }, {\n    key: 'hasFlag',\n    value: function hasFlag(flag) {\n      return this._hasFlag(this.flags, flag);\n    }\n  }, {\n    key: 'setRectangle',\n    value: function setRectangle(rectangle) {\n      if (Array.isArray(rectangle) && rectangle.length === 4) {\n        this.rectangle = _util.Util.normalizeRect(rectangle);\n      } else {\n        this.rectangle = [0, 0, 0, 0];\n      }\n    }\n  }, {\n    key: 'setColor',\n    value: function setColor(color) {\n      var rgbColor = new Uint8ClampedArray(3);\n      if (!Array.isArray(color)) {\n        this.color = rgbColor;\n        return;\n      }\n      switch (color.length) {\n        case 0:\n          this.color = null;\n          break;\n        case 1:\n          _colorspace.ColorSpace.singletons.gray.getRgbItem(color, 0, rgbColor, 0);\n          this.color = rgbColor;\n          break;\n        case 3:\n          _colorspace.ColorSpace.singletons.rgb.getRgbItem(color, 0, rgbColor, 0);\n          this.color = rgbColor;\n          break;\n        case 4:\n          _colorspace.ColorSpace.singletons.cmyk.getRgbItem(color, 0, rgbColor, 0);\n          this.color = rgbColor;\n          break;\n        default:\n          this.color = rgbColor;\n          break;\n      }\n    }\n  }, {\n    key: 'setBorderStyle',\n    value: function setBorderStyle(borderStyle) {\n      this.borderStyle = new AnnotationBorderStyle();\n      if (!(0, _primitives.isDict)(borderStyle)) {\n        return;\n      }\n      if (borderStyle.has('BS')) {\n        var dict = borderStyle.get('BS');\n        var dictType = dict.get('Type');\n        if (!dictType || (0, _primitives.isName)(dictType, 'Border')) {\n          this.borderStyle.setWidth(dict.get('W'));\n          this.borderStyle.setStyle(dict.get('S'));\n          this.borderStyle.setDashArray(dict.getArray('D'));\n        }\n      } else if (borderStyle.has('Border')) {\n        var 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]);\n          if (array.length === 4) {\n            this.borderStyle.setDashArray(array[3]);\n          }\n        }\n      } else {\n        this.borderStyle.setWidth(0);\n      }\n    }\n  }, {\n    key: 'setAppearance',\n    value: function setAppearance(dict) {\n      this.appearance = null;\n      var appearanceStates = dict.get('AP');\n      if (!(0, _primitives.isDict)(appearanceStates)) {\n        return;\n      }\n      var normalAppearanceState = appearanceStates.get('N');\n      if ((0, _primitives.isStream)(normalAppearanceState)) {\n        this.appearance = normalAppearanceState;\n        return;\n      }\n      if (!(0, _primitives.isDict)(normalAppearanceState)) {\n        return;\n      }\n      var as = dict.get('AS');\n      if (!(0, _primitives.isName)(as) || !normalAppearanceState.has(as.name)) {\n        return;\n      }\n      this.appearance = normalAppearanceState.get(as.name);\n    }\n  }, {\n    key: '_preparePopup',\n    value: function _preparePopup(dict) {\n      if (!dict.has('C')) {\n        this.data.color = null;\n      }\n      this.data.hasPopup = dict.has('Popup');\n      this.data.title = (0, _util.stringToPDFString)(dict.get('T') || '');\n      this.data.contents = (0, _util.stringToPDFString)(dict.get('Contents') || '');\n    }\n  }, {\n    key: 'loadResources',\n    value: function loadResources(keys) {\n      return this.appearance.dict.getAsync('Resources').then(function (resources) {\n        if (!resources) {\n          return;\n        }\n        var objectLoader = new _obj.ObjectLoader(resources, keys, resources.xref);\n        return objectLoader.load().then(function () {\n          return resources;\n        });\n      });\n    }\n  }, {\n    key: 'getOperatorList',\n    value: function getOperatorList(evaluator, task, renderForms) {\n      var _this = this;\n\n      if (!this.appearance) {\n        return Promise.resolve(new _operator_list.OperatorList());\n      }\n      var data = this.data;\n      var appearanceDict = this.appearance.dict;\n      var resourcesPromise = this.loadResources(['ExtGState', 'ColorSpace', 'Pattern', 'Shading', 'XObject', 'Font']);\n      var bbox = appearanceDict.getArray('BBox') || [0, 0, 1, 1];\n      var matrix = appearanceDict.getArray('Matrix') || [1, 0, 0, 1, 0, 0];\n      var transform = getTransformMatrix(data.rect, bbox, matrix);\n      return resourcesPromise.then(function (resources) {\n        var opList = new _operator_list.OperatorList();\n        opList.addOp(_util.OPS.beginAnnotation, [data.rect, transform, matrix]);\n        return evaluator.getOperatorList({\n          stream: _this.appearance,\n          task: task,\n          resources: resources,\n          operatorList: opList\n        }).then(function () {\n          opList.addOp(_util.OPS.endAnnotation, []);\n          _this.appearance.reset();\n          return opList;\n        });\n      });\n    }\n  }, {\n    key: 'viewable',\n    get: function get() {\n      if (this.flags === 0) {\n        return true;\n      }\n      return this._isViewable(this.flags);\n    }\n  }, {\n    key: 'printable',\n    get: function get() {\n      if (this.flags === 0) {\n        return false;\n      }\n      return this._isPrintable(this.flags);\n    }\n  }]);\n\n  return Annotation;\n}();\n\nvar AnnotationBorderStyle = function () {\n  function AnnotationBorderStyle() {\n    _classCallCheck(this, AnnotationBorderStyle);\n\n    this.width = 1;\n    this.style = _util.AnnotationBorderStyleType.SOLID;\n    this.dashArray = [3];\n    this.horizontalCornerRadius = 0;\n    this.verticalCornerRadius = 0;\n  }\n\n  _createClass(AnnotationBorderStyle, [{\n    key: 'setWidth',\n    value: function setWidth(width) {\n      if (Number.isInteger(width)) {\n        this.width = width;\n      }\n    }\n  }, {\n    key: 'setStyle',\n    value: function setStyle(style) {\n      if (!style) {\n        return;\n      }\n      switch (style.name) {\n        case 'S':\n          this.style = _util.AnnotationBorderStyleType.SOLID;\n          break;\n        case 'D':\n          this.style = _util.AnnotationBorderStyleType.DASHED;\n          break;\n        case 'B':\n          this.style = _util.AnnotationBorderStyleType.BEVELED;\n          break;\n        case 'I':\n          this.style = _util.AnnotationBorderStyleType.INSET;\n          break;\n        case 'U':\n          this.style = _util.AnnotationBorderStyleType.UNDERLINE;\n          break;\n        default:\n          break;\n      }\n    }\n  }, {\n    key: 'setDashArray',\n    value: function setDashArray(dashArray) {\n      if (Array.isArray(dashArray) && dashArray.length > 0) {\n        var isValid = true;\n        var allZeros = true;\n        for (var i = 0, len = dashArray.length; i < len; i++) {\n          var element = dashArray[i];\n          var validNumber = +element >= 0;\n          if (!validNumber) {\n            isValid = false;\n            break;\n          } else if (element > 0) {\n            allZeros = false;\n          }\n        }\n        if (isValid && !allZeros) {\n          this.dashArray = dashArray;\n        } else {\n          this.width = 0;\n        }\n      } else if (dashArray) {\n        this.width = 0;\n      }\n    }\n  }, {\n    key: 'setHorizontalCornerRadius',\n    value: function setHorizontalCornerRadius(radius) {\n      if (Number.isInteger(radius)) {\n        this.horizontalCornerRadius = radius;\n      }\n    }\n  }, {\n    key: 'setVerticalCornerRadius',\n    value: function setVerticalCornerRadius(radius) {\n      if (Number.isInteger(radius)) {\n        this.verticalCornerRadius = radius;\n      }\n    }\n  }]);\n\n  return AnnotationBorderStyle;\n}();\n\nvar WidgetAnnotation = function (_Annotation) {\n  _inherits(WidgetAnnotation, _Annotation);\n\n  function WidgetAnnotation(params) {\n    _classCallCheck(this, WidgetAnnotation);\n\n    var _this2 = _possibleConstructorReturn(this, (WidgetAnnotation.__proto__ || Object.getPrototypeOf(WidgetAnnotation)).call(this, params));\n\n    var dict = params.dict;\n    var data = _this2.data;\n    data.annotationType = _util.AnnotationType.WIDGET;\n    data.fieldName = _this2._constructFieldName(dict);\n    data.fieldValue = (0, _util.getInheritableProperty)({\n      dict: dict,\n      key: 'V',\n      getArray: true\n    });\n    data.alternativeText = (0, _util.stringToPDFString)(dict.get('TU') || '');\n    data.defaultAppearance = (0, _util.getInheritableProperty)({\n      dict: dict,\n      key: 'DA'\n    }) || '';\n    var fieldType = (0, _util.getInheritableProperty)({\n      dict: dict,\n      key: 'FT'\n    });\n    data.fieldType = (0, _primitives.isName)(fieldType) ? fieldType.name : null;\n    _this2.fieldResources = (0, _util.getInheritableProperty)({\n      dict: dict,\n      key: 'DR'\n    }) || _primitives.Dict.empty;\n    data.fieldFlags = (0, _util.getInheritableProperty)({\n      dict: dict,\n      key: 'Ff'\n    });\n    if (!Number.isInteger(data.fieldFlags) || data.fieldFlags < 0) {\n      data.fieldFlags = 0;\n    }\n    data.readOnly = _this2.hasFieldFlag(_util.AnnotationFieldFlag.READONLY);\n    if (data.fieldType === 'Sig') {\n      _this2.setFlags(_util.AnnotationFlag.HIDDEN);\n    }\n    return _this2;\n  }\n\n  _createClass(WidgetAnnotation, [{\n    key: '_constructFieldName',\n    value: function _constructFieldName(dict) {\n      if (!dict.has('T') && !dict.has('Parent')) {\n        (0, _util.warn)('Unknown field name, falling back to empty field name.');\n        return '';\n      }\n      if (!dict.has('Parent')) {\n        return (0, _util.stringToPDFString)(dict.get('T'));\n      }\n      var fieldName = [];\n      if (dict.has('T')) {\n        fieldName.unshift((0, _util.stringToPDFString)(dict.get('T')));\n      }\n      var loopDict = dict;\n      while (loopDict.has('Parent')) {\n        loopDict = loopDict.get('Parent');\n        if (!(0, _primitives.isDict)(loopDict)) {\n          break;\n        }\n        if (loopDict.has('T')) {\n          fieldName.unshift((0, _util.stringToPDFString)(loopDict.get('T')));\n        }\n      }\n      return fieldName.join('.');\n    }\n  }, {\n    key: 'hasFieldFlag',\n    value: function hasFieldFlag(flag) {\n      return !!(this.data.fieldFlags & flag);\n    }\n  }, {\n    key: 'getOperatorList',\n    value: function getOperatorList(evaluator, task, renderForms) {\n      if (renderForms) {\n        return Promise.resolve(new _operator_list.OperatorList());\n      }\n      return _get(WidgetAnnotation.prototype.__proto__ || Object.getPrototypeOf(WidgetAnnotation.prototype), 'getOperatorList', this).call(this, evaluator, task, renderForms);\n    }\n  }]);\n\n  return WidgetAnnotation;\n}(Annotation);\n\nvar TextWidgetAnnotation = function (_WidgetAnnotation) {\n  _inherits(TextWidgetAnnotation, _WidgetAnnotation);\n\n  function TextWidgetAnnotation(params) {\n    _classCallCheck(this, TextWidgetAnnotation);\n\n    var _this3 = _possibleConstructorReturn(this, (TextWidgetAnnotation.__proto__ || Object.getPrototypeOf(TextWidgetAnnotation)).call(this, params));\n\n    var dict = params.dict;\n    _this3.data.fieldValue = (0, _util.stringToPDFString)(_this3.data.fieldValue || '');\n    var alignment = (0, _util.getInheritableProperty)({\n      dict: dict,\n      key: 'Q'\n    });\n    if (!Number.isInteger(alignment) || alignment < 0 || alignment > 2) {\n      alignment = null;\n    }\n    _this3.data.textAlignment = alignment;\n    var maximumLength = (0, _util.getInheritableProperty)({\n      dict: dict,\n      key: 'MaxLen'\n    });\n    if (!Number.isInteger(maximumLength) || maximumLength < 0) {\n      maximumLength = null;\n    }\n    _this3.data.maxLen = maximumLength;\n    _this3.data.multiLine = _this3.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE);\n    _this3.data.comb = _this3.hasFieldFlag(_util.AnnotationFieldFlag.COMB) && !_this3.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE) && !_this3.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD) && !_this3.hasFieldFlag(_util.AnnotationFieldFlag.FILESELECT) && _this3.data.maxLen !== null;\n    return _this3;\n  }\n\n  _createClass(TextWidgetAnnotation, [{\n    key: 'getOperatorList',\n    value: function getOperatorList(evaluator, task, renderForms) {\n      if (renderForms || this.appearance) {\n        return _get(TextWidgetAnnotation.prototype.__proto__ || Object.getPrototypeOf(TextWidgetAnnotation.prototype), 'getOperatorList', this).call(this, evaluator, task, renderForms);\n      }\n      var operatorList = new _operator_list.OperatorList();\n      if (!this.data.defaultAppearance) {\n        return Promise.resolve(operatorList);\n      }\n      var stream = new _stream.Stream((0, _util.stringToBytes)(this.data.defaultAppearance));\n      return evaluator.getOperatorList({\n        stream: stream,\n        task: task,\n        resources: this.fieldResources,\n        operatorList: operatorList\n      }).then(function () {\n        return operatorList;\n      });\n    }\n  }]);\n\n  return TextWidgetAnnotation;\n}(WidgetAnnotation);\n\nvar ButtonWidgetAnnotation = function (_WidgetAnnotation2) {\n  _inherits(ButtonWidgetAnnotation, _WidgetAnnotation2);\n\n  function ButtonWidgetAnnotation(params) {\n    _classCallCheck(this, ButtonWidgetAnnotation);\n\n    var _this4 = _possibleConstructorReturn(this, (ButtonWidgetAnnotation.__proto__ || Object.getPrototypeOf(ButtonWidgetAnnotation)).call(this, params));\n\n    _this4.data.checkBox = !_this4.hasFieldFlag(_util.AnnotationFieldFlag.RADIO) && !_this4.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON);\n    _this4.data.radioButton = _this4.hasFieldFlag(_util.AnnotationFieldFlag.RADIO) && !_this4.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON);\n    _this4.data.pushButton = _this4.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON);\n    if (_this4.data.checkBox) {\n      _this4._processCheckBox(params);\n    } else if (_this4.data.radioButton) {\n      _this4._processRadioButton(params);\n    } else if (_this4.data.pushButton) {\n      _this4._processPushButton(params);\n    } else {\n      (0, _util.warn)('Invalid field flags for button widget annotation');\n    }\n    return _this4;\n  }\n\n  _createClass(ButtonWidgetAnnotation, [{\n    key: '_processCheckBox',\n    value: function _processCheckBox(params) {\n      if ((0, _primitives.isName)(this.data.fieldValue)) {\n        this.data.fieldValue = this.data.fieldValue.name;\n      }\n      var customAppearance = params.dict.get('AP');\n      if (!(0, _primitives.isDict)(customAppearance)) {\n        return;\n      }\n      var exportValueOptionsDict = customAppearance.get('D');\n      if (!(0, _primitives.isDict)(exportValueOptionsDict)) {\n        return;\n      }\n      var exportValues = exportValueOptionsDict.getKeys();\n      var hasCorrectOptionCount = exportValues.length === 2;\n      if (!hasCorrectOptionCount) {\n        return;\n      }\n      this.data.exportValue = exportValues[0] === 'Off' ? exportValues[1] : exportValues[0];\n    }\n  }, {\n    key: '_processRadioButton',\n    value: function _processRadioButton(params) {\n      this.data.fieldValue = this.data.buttonValue = null;\n      var fieldParent = params.dict.get('Parent');\n      if ((0, _primitives.isDict)(fieldParent) && fieldParent.has('V')) {\n        var fieldParentValue = fieldParent.get('V');\n        if ((0, _primitives.isName)(fieldParentValue)) {\n          this.data.fieldValue = fieldParentValue.name;\n        }\n      }\n      var appearanceStates = params.dict.get('AP');\n      if (!(0, _primitives.isDict)(appearanceStates)) {\n        return;\n      }\n      var normalAppearanceState = appearanceStates.get('N');\n      if (!(0, _primitives.isDict)(normalAppearanceState)) {\n        return;\n      }\n      var keys = normalAppearanceState.getKeys();\n      for (var i = 0, ii = keys.length; i < ii; i++) {\n        if (keys[i] !== 'Off') {\n          this.data.buttonValue = keys[i];\n          break;\n        }\n      }\n    }\n  }, {\n    key: '_processPushButton',\n    value: function _processPushButton(params) {\n      if (!params.dict.has('A')) {\n        (0, _util.warn)('Push buttons without action dictionaries are not supported');\n        return;\n      }\n      _obj.Catalog.parseDestDictionary({\n        destDict: params.dict,\n        resultObj: this.data,\n        docBaseUrl: params.pdfManager.docBaseUrl\n      });\n    }\n  }]);\n\n  return ButtonWidgetAnnotation;\n}(WidgetAnnotation);\n\nvar ChoiceWidgetAnnotation = function (_WidgetAnnotation3) {\n  _inherits(ChoiceWidgetAnnotation, _WidgetAnnotation3);\n\n  function ChoiceWidgetAnnotation(params) {\n    _classCallCheck(this, ChoiceWidgetAnnotation);\n\n    var _this5 = _possibleConstructorReturn(this, (ChoiceWidgetAnnotation.__proto__ || Object.getPrototypeOf(ChoiceWidgetAnnotation)).call(this, params));\n\n    _this5.data.options = [];\n    var options = (0, _util.getInheritableProperty)({\n      dict: params.dict,\n      key: 'Opt'\n    });\n    if (Array.isArray(options)) {\n      var xref = params.xref;\n      for (var i = 0, ii = options.length; i < ii; i++) {\n        var option = xref.fetchIfRef(options[i]);\n        var isOptionArray = Array.isArray(option);\n        _this5.data.options[i] = {\n          exportValue: isOptionArray ? xref.fetchIfRef(option[0]) : option,\n          displayValue: (0, _util.stringToPDFString)(isOptionArray ? xref.fetchIfRef(option[1]) : option)\n        };\n      }\n    }\n    if (!Array.isArray(_this5.data.fieldValue)) {\n      _this5.data.fieldValue = [_this5.data.fieldValue];\n    }\n    _this5.data.combo = _this5.hasFieldFlag(_util.AnnotationFieldFlag.COMBO);\n    _this5.data.multiSelect = _this5.hasFieldFlag(_util.AnnotationFieldFlag.MULTISELECT);\n    return _this5;\n  }\n\n  return ChoiceWidgetAnnotation;\n}(WidgetAnnotation);\n\nvar TextAnnotation = function (_Annotation2) {\n  _inherits(TextAnnotation, _Annotation2);\n\n  function TextAnnotation(parameters) {\n    _classCallCheck(this, TextAnnotation);\n\n    var DEFAULT_ICON_SIZE = 22;\n\n    var _this6 = _possibleConstructorReturn(this, (TextAnnotation.__proto__ || Object.getPrototypeOf(TextAnnotation)).call(this, parameters));\n\n    _this6.data.annotationType = _util.AnnotationType.TEXT;\n    if (_this6.data.hasAppearance) {\n      _this6.data.name = 'NoIcon';\n    } else {\n      _this6.data.rect[1] = _this6.data.rect[3] - DEFAULT_ICON_SIZE;\n      _this6.data.rect[2] = _this6.data.rect[0] + DEFAULT_ICON_SIZE;\n      _this6.data.name = parameters.dict.has('Name') ? parameters.dict.get('Name').name : 'Note';\n    }\n    _this6._preparePopup(parameters.dict);\n    return _this6;\n  }\n\n  return TextAnnotation;\n}(Annotation);\n\nvar LinkAnnotation = function (_Annotation3) {\n  _inherits(LinkAnnotation, _Annotation3);\n\n  function LinkAnnotation(params) {\n    _classCallCheck(this, LinkAnnotation);\n\n    var _this7 = _possibleConstructorReturn(this, (LinkAnnotation.__proto__ || Object.getPrototypeOf(LinkAnnotation)).call(this, params));\n\n    _this7.data.annotationType = _util.AnnotationType.LINK;\n    _obj.Catalog.parseDestDictionary({\n      destDict: params.dict,\n      resultObj: _this7.data,\n      docBaseUrl: params.pdfManager.docBaseUrl\n    });\n    return _this7;\n  }\n\n  return LinkAnnotation;\n}(Annotation);\n\nvar PopupAnnotation = function (_Annotation4) {\n  _inherits(PopupAnnotation, _Annotation4);\n\n  function PopupAnnotation(parameters) {\n    _classCallCheck(this, PopupAnnotation);\n\n    var _this8 = _possibleConstructorReturn(this, (PopupAnnotation.__proto__ || Object.getPrototypeOf(PopupAnnotation)).call(this, parameters));\n\n    _this8.data.annotationType = _util.AnnotationType.POPUP;\n    var dict = parameters.dict;\n    var parentItem = dict.get('Parent');\n    if (!parentItem) {\n      (0, _util.warn)('Popup annotation has a missing or invalid parent annotation.');\n      return _possibleConstructorReturn(_this8);\n    }\n    var parentSubtype = parentItem.get('Subtype');\n    _this8.data.parentType = (0, _primitives.isName)(parentSubtype) ? parentSubtype.name : null;\n    _this8.data.parentId = dict.getRaw('Parent').toString();\n    _this8.data.title = (0, _util.stringToPDFString)(parentItem.get('T') || '');\n    _this8.data.contents = (0, _util.stringToPDFString)(parentItem.get('Contents') || '');\n    if (!parentItem.has('C')) {\n      _this8.data.color = null;\n    } else {\n      _this8.setColor(parentItem.getArray('C'));\n      _this8.data.color = _this8.color;\n    }\n    if (!_this8.viewable) {\n      var parentFlags = parentItem.get('F');\n      if (_this8._isViewable(parentFlags)) {\n        _this8.setFlags(parentFlags);\n      }\n    }\n    return _this8;\n  }\n\n  return PopupAnnotation;\n}(Annotation);\n\nvar LineAnnotation = function (_Annotation5) {\n  _inherits(LineAnnotation, _Annotation5);\n\n  function LineAnnotation(parameters) {\n    _classCallCheck(this, LineAnnotation);\n\n    var _this9 = _possibleConstructorReturn(this, (LineAnnotation.__proto__ || Object.getPrototypeOf(LineAnnotation)).call(this, parameters));\n\n    _this9.data.annotationType = _util.AnnotationType.LINE;\n    var dict = parameters.dict;\n    _this9.data.lineCoordinates = _util.Util.normalizeRect(dict.getArray('L'));\n    _this9._preparePopup(dict);\n    return _this9;\n  }\n\n  return LineAnnotation;\n}(Annotation);\n\nvar SquareAnnotation = function (_Annotation6) {\n  _inherits(SquareAnnotation, _Annotation6);\n\n  function SquareAnnotation(parameters) {\n    _classCallCheck(this, SquareAnnotation);\n\n    var _this10 = _possibleConstructorReturn(this, (SquareAnnotation.__proto__ || Object.getPrototypeOf(SquareAnnotation)).call(this, parameters));\n\n    _this10.data.annotationType = _util.AnnotationType.SQUARE;\n    _this10._preparePopup(parameters.dict);\n    return _this10;\n  }\n\n  return SquareAnnotation;\n}(Annotation);\n\nvar CircleAnnotation = function (_Annotation7) {\n  _inherits(CircleAnnotation, _Annotation7);\n\n  function CircleAnnotation(parameters) {\n    _classCallCheck(this, CircleAnnotation);\n\n    var _this11 = _possibleConstructorReturn(this, (CircleAnnotation.__proto__ || Object.getPrototypeOf(CircleAnnotation)).call(this, parameters));\n\n    _this11.data.annotationType = _util.AnnotationType.CIRCLE;\n    _this11._preparePopup(parameters.dict);\n    return _this11;\n  }\n\n  return CircleAnnotation;\n}(Annotation);\n\nvar PolylineAnnotation = function (_Annotation8) {\n  _inherits(PolylineAnnotation, _Annotation8);\n\n  function PolylineAnnotation(parameters) {\n    _classCallCheck(this, PolylineAnnotation);\n\n    var _this12 = _possibleConstructorReturn(this, (PolylineAnnotation.__proto__ || Object.getPrototypeOf(PolylineAnnotation)).call(this, parameters));\n\n    _this12.data.annotationType = _util.AnnotationType.POLYLINE;\n    var dict = parameters.dict;\n    var rawVertices = dict.getArray('Vertices');\n    _this12.data.vertices = [];\n    for (var i = 0, ii = rawVertices.length; i < ii; i += 2) {\n      _this12.data.vertices.push({\n        x: rawVertices[i],\n        y: rawVertices[i + 1]\n      });\n    }\n    _this12._preparePopup(dict);\n    return _this12;\n  }\n\n  return PolylineAnnotation;\n}(Annotation);\n\nvar PolygonAnnotation = function (_PolylineAnnotation) {\n  _inherits(PolygonAnnotation, _PolylineAnnotation);\n\n  function PolygonAnnotation(parameters) {\n    _classCallCheck(this, PolygonAnnotation);\n\n    var _this13 = _possibleConstructorReturn(this, (PolygonAnnotation.__proto__ || Object.getPrototypeOf(PolygonAnnotation)).call(this, parameters));\n\n    _this13.data.annotationType = _util.AnnotationType.POLYGON;\n    return _this13;\n  }\n\n  return PolygonAnnotation;\n}(PolylineAnnotation);\n\nvar HighlightAnnotation = function (_Annotation9) {\n  _inherits(HighlightAnnotation, _Annotation9);\n\n  function HighlightAnnotation(parameters) {\n    _classCallCheck(this, HighlightAnnotation);\n\n    var _this14 = _possibleConstructorReturn(this, (HighlightAnnotation.__proto__ || Object.getPrototypeOf(HighlightAnnotation)).call(this, parameters));\n\n    _this14.data.annotationType = _util.AnnotationType.HIGHLIGHT;\n    _this14._preparePopup(parameters.dict);\n    return _this14;\n  }\n\n  return HighlightAnnotation;\n}(Annotation);\n\nvar UnderlineAnnotation = function (_Annotation10) {\n  _inherits(UnderlineAnnotation, _Annotation10);\n\n  function UnderlineAnnotation(parameters) {\n    _classCallCheck(this, UnderlineAnnotation);\n\n    var _this15 = _possibleConstructorReturn(this, (UnderlineAnnotation.__proto__ || Object.getPrototypeOf(UnderlineAnnotation)).call(this, parameters));\n\n    _this15.data.annotationType = _util.AnnotationType.UNDERLINE;\n    _this15._preparePopup(parameters.dict);\n    return _this15;\n  }\n\n  return UnderlineAnnotation;\n}(Annotation);\n\nvar SquigglyAnnotation = function (_Annotation11) {\n  _inherits(SquigglyAnnotation, _Annotation11);\n\n  function SquigglyAnnotation(parameters) {\n    _classCallCheck(this, SquigglyAnnotation);\n\n    var _this16 = _possibleConstructorReturn(this, (SquigglyAnnotation.__proto__ || Object.getPrototypeOf(SquigglyAnnotation)).call(this, parameters));\n\n    _this16.data.annotationType = _util.AnnotationType.SQUIGGLY;\n    _this16._preparePopup(parameters.dict);\n    return _this16;\n  }\n\n  return SquigglyAnnotation;\n}(Annotation);\n\nvar StrikeOutAnnotation = function (_Annotation12) {\n  _inherits(StrikeOutAnnotation, _Annotation12);\n\n  function StrikeOutAnnotation(parameters) {\n    _classCallCheck(this, StrikeOutAnnotation);\n\n    var _this17 = _possibleConstructorReturn(this, (StrikeOutAnnotation.__proto__ || Object.getPrototypeOf(StrikeOutAnnotation)).call(this, parameters));\n\n    _this17.data.annotationType = _util.AnnotationType.STRIKEOUT;\n    _this17._preparePopup(parameters.dict);\n    return _this17;\n  }\n\n  return StrikeOutAnnotation;\n}(Annotation);\n\nvar StampAnnotation = function (_Annotation13) {\n  _inherits(StampAnnotation, _Annotation13);\n\n  function StampAnnotation(parameters) {\n    _classCallCheck(this, StampAnnotation);\n\n    var _this18 = _possibleConstructorReturn(this, (StampAnnotation.__proto__ || Object.getPrototypeOf(StampAnnotation)).call(this, parameters));\n\n    _this18.data.annotationType = _util.AnnotationType.STAMP;\n    _this18._preparePopup(parameters.dict);\n    return _this18;\n  }\n\n  return StampAnnotation;\n}(Annotation);\n\nvar FileAttachmentAnnotation = function (_Annotation14) {\n  _inherits(FileAttachmentAnnotation, _Annotation14);\n\n  function FileAttachmentAnnotation(parameters) {\n    _classCallCheck(this, FileAttachmentAnnotation);\n\n    var _this19 = _possibleConstructorReturn(this, (FileAttachmentAnnotation.__proto__ || Object.getPrototypeOf(FileAttachmentAnnotation)).call(this, parameters));\n\n    var file = new _obj.FileSpec(parameters.dict.get('FS'), parameters.xref);\n    _this19.data.annotationType = _util.AnnotationType.FILEATTACHMENT;\n    _this19.data.file = file.serializable;\n    _this19._preparePopup(parameters.dict);\n    return _this19;\n  }\n\n  return FileAttachmentAnnotation;\n}(Annotation);\n\nexports.Annotation = Annotation;\nexports.AnnotationBorderStyle = AnnotationBorderStyle;\nexports.AnnotationFactory = AnnotationFactory;\n\n/***/ }),\n/* 138 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.OperatorList = undefined;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar QueueOptimizer = function QueueOptimizerClosure() {\n  function addState(parentState, pattern, checkFn, iterateFn, processFn) {\n    var state = parentState;\n    for (var i = 0, ii = pattern.length - 1; i < ii; i++) {\n      var item = pattern[i];\n      state = state[item] || (state[item] = []);\n    }\n    state[pattern[pattern.length - 1]] = {\n      checkFn: checkFn,\n      iterateFn: iterateFn,\n      processFn: processFn\n    };\n  }\n  function handlePaintSolidColorImageMask(iFirstSave, count, fnArray, argsArray) {\n    var iFirstPIMXO = iFirstSave + 2;\n    for (var i = 0; i < count; i++) {\n      var arg = argsArray[iFirstPIMXO + 4 * i];\n      var imageMask = arg.length === 1 && arg[0];\n      if (imageMask && imageMask.width === 1 && imageMask.height === 1 && (!imageMask.data.length || imageMask.data.length === 1 && imageMask.data[0] === 0)) {\n        fnArray[iFirstPIMXO + 4 * i] = _util.OPS.paintSolidColorImageMask;\n        continue;\n      }\n      break;\n    }\n    return count - i;\n  }\n  var InitialState = [];\n  addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintInlineImageXObject, _util.OPS.restore], null, function iterateInlineImageGroup(context, i) {\n    var fnArray = context.fnArray;\n    var iFirstSave = context.iCurr - 3;\n    var pos = (i - iFirstSave) % 4;\n    switch (pos) {\n      case 0:\n        return fnArray[i] === _util.OPS.save;\n      case 1:\n        return fnArray[i] === _util.OPS.transform;\n      case 2:\n        return fnArray[i] === _util.OPS.paintInlineImageXObject;\n      case 3:\n        return fnArray[i] === _util.OPS.restore;\n    }\n  }, function foundInlineImageGroup(context, i) {\n    var MIN_IMAGES_IN_INLINE_IMAGES_BLOCK = 10;\n    var MAX_IMAGES_IN_INLINE_IMAGES_BLOCK = 200;\n    var MAX_WIDTH = 1000;\n    var IMAGE_PADDING = 1;\n    var fnArray = context.fnArray,\n        argsArray = context.argsArray;\n    var curr = context.iCurr;\n    var iFirstSave = curr - 3;\n    var iFirstTransform = curr - 2;\n    var iFirstPIIXO = curr - 1;\n    var 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    var maxX = 0;\n    var map = [],\n        maxLineHeight = 0;\n    var currentX = IMAGE_PADDING,\n        currentY = IMAGE_PADDING;\n    var q;\n    for (q = 0; q < count; q++) {\n      var transform = argsArray[iFirstTransform + (q << 2)];\n      var 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: 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    var imgWidth = Math.max(maxX, currentX) + IMAGE_PADDING;\n    var imgHeight = currentY + maxLineHeight + IMAGE_PADDING;\n    var imgData = new Uint8Array(imgWidth * imgHeight * 4);\n    var imgRowSize = imgWidth << 2;\n    for (q = 0; q < count; q++) {\n      var data = argsArray[iFirstPIIXO + (q << 2)][0].data;\n      var rowSize = map[q].w << 2;\n      var dataOffset = 0;\n      var offset = map[q].x + map[q].y * imgWidth << 2;\n      imgData.set(data.subarray(0, rowSize), offset - imgRowSize);\n      for (var 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    fnArray.splice(iFirstSave, count * 4, _util.OPS.paintInlineImageXObjectGroup);\n    argsArray.splice(iFirstSave, count * 4, [{\n      width: imgWidth,\n      height: imgHeight,\n      kind: _util.ImageKind.RGBA_32BPP,\n      data: imgData\n    }, map]);\n    return iFirstSave + 1;\n  });\n  addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintImageMaskXObject, _util.OPS.restore], null, function iterateImageMaskGroup(context, i) {\n    var fnArray = context.fnArray;\n    var iFirstSave = context.iCurr - 3;\n    var pos = (i - iFirstSave) % 4;\n    switch (pos) {\n      case 0:\n        return fnArray[i] === _util.OPS.save;\n      case 1:\n        return fnArray[i] === _util.OPS.transform;\n      case 2:\n        return fnArray[i] === _util.OPS.paintImageMaskXObject;\n      case 3:\n        return fnArray[i] === _util.OPS.restore;\n    }\n  }, function foundImageMaskGroup(context, i) {\n    var MIN_IMAGES_IN_MASKS_BLOCK = 10;\n    var MAX_IMAGES_IN_MASKS_BLOCK = 100;\n    var MAX_SAME_IMAGES_IN_MASKS_BLOCK = 1000;\n    var fnArray = context.fnArray,\n        argsArray = context.argsArray;\n    var curr = context.iCurr;\n    var iFirstSave = curr - 3;\n    var iFirstTransform = curr - 2;\n    var iFirstPIMXO = curr - 1;\n    var count = Math.floor((i - iFirstSave) / 4);\n    count = handlePaintSolidColorImageMask(iFirstSave, count, fnArray, argsArray);\n    if (count < MIN_IMAGES_IN_MASKS_BLOCK) {\n      return i - (i - iFirstSave) % 4;\n    }\n    var q;\n    var isSameImage = false;\n    var iTransform, transformArgs;\n    var firstPIMXOArg0 = argsArray[iFirstPIMXO][0];\n    if (argsArray[iFirstTransform][1] === 0 && argsArray[iFirstTransform][2] === 0) {\n      isSameImage = true;\n      var firstTransformArg0 = argsArray[iFirstTransform][0];\n      var firstTransformArg3 = argsArray[iFirstTransform][3];\n      iTransform = iFirstTransform + 4;\n      var iPIMXO = iFirstPIMXO + 4;\n      for (q = 1; q < count; q++, iTransform += 4, iPIMXO += 4) {\n        transformArgs = argsArray[iTransform];\n        if (argsArray[iPIMXO][0] !== firstPIMXOArg0 || transformArgs[0] !== firstTransformArg0 || transformArgs[1] !== 0 || transformArgs[2] !== 0 || 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      var positions = new Float32Array(count * 2);\n      iTransform = iFirstTransform;\n      for (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, _util.OPS.paintImageMaskXObjectRepeat);\n      argsArray.splice(iFirstSave, count * 4, [firstPIMXOArg0, firstTransformArg0, firstTransformArg3, positions]);\n    } else {\n      count = Math.min(count, MAX_IMAGES_IN_MASKS_BLOCK);\n      var images = [];\n      for (q = 0; q < count; q++) {\n        transformArgs = argsArray[iFirstTransform + (q << 2)];\n        var maskParams = argsArray[iFirstPIMXO + (q << 2)][0];\n        images.push({\n          data: maskParams.data,\n          width: maskParams.width,\n          height: maskParams.height,\n          transform: transformArgs\n        });\n      }\n      fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectGroup);\n      argsArray.splice(iFirstSave, count * 4, [images]);\n    }\n    return iFirstSave + 1;\n  });\n  addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintImageXObject, _util.OPS.restore], function (context) {\n    var argsArray = context.argsArray;\n    var iFirstTransform = context.iCurr - 2;\n    return argsArray[iFirstTransform][1] === 0 && argsArray[iFirstTransform][2] === 0;\n  }, function (context, i) {\n    var fnArray = context.fnArray,\n        argsArray = context.argsArray;\n    var iFirstSave = context.iCurr - 3;\n    var pos = (i - iFirstSave) % 4;\n    switch (pos) {\n      case 0:\n        return fnArray[i] === _util.OPS.save;\n      case 1:\n        if (fnArray[i] !== _util.OPS.transform) {\n          return false;\n        }\n        var iFirstTransform = context.iCurr - 2;\n        var firstTransformArg0 = argsArray[iFirstTransform][0];\n        var 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] !== _util.OPS.paintImageXObject) {\n          return false;\n        }\n        var iFirstPIXO = context.iCurr - 1;\n        var firstPIXOArg0 = argsArray[iFirstPIXO][0];\n        if (argsArray[i][0] !== firstPIXOArg0) {\n          return false;\n        }\n        return true;\n      case 3:\n        return fnArray[i] === _util.OPS.restore;\n    }\n  }, function (context, i) {\n    var MIN_IMAGES_IN_BLOCK = 3;\n    var MAX_IMAGES_IN_BLOCK = 1000;\n    var fnArray = context.fnArray,\n        argsArray = context.argsArray;\n    var curr = context.iCurr;\n    var iFirstSave = curr - 3;\n    var iFirstTransform = curr - 2;\n    var iFirstPIXO = curr - 1;\n    var firstPIXOArg0 = argsArray[iFirstPIXO][0];\n    var firstTransformArg0 = argsArray[iFirstTransform][0];\n    var firstTransformArg3 = argsArray[iFirstTransform][3];\n    var 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    var positions = new Float32Array(count * 2);\n    var iTransform = iFirstTransform;\n    for (var q = 0; q < count; q++, iTransform += 4) {\n      var transformArgs = argsArray[iTransform];\n      positions[q << 1] = transformArgs[4];\n      positions[(q << 1) + 1] = transformArgs[5];\n    }\n    var args = [firstPIXOArg0, firstTransformArg0, firstTransformArg3, positions];\n    fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageXObjectRepeat);\n    argsArray.splice(iFirstSave, count * 4, args);\n    return iFirstSave + 1;\n  });\n  addState(InitialState, [_util.OPS.beginText, _util.OPS.setFont, _util.OPS.setTextMatrix, _util.OPS.showText, _util.OPS.endText], null, function (context, i) {\n    var fnArray = context.fnArray,\n        argsArray = context.argsArray;\n    var iFirstSave = context.iCurr - 4;\n    var pos = (i - iFirstSave) % 5;\n    switch (pos) {\n      case 0:\n        return fnArray[i] === _util.OPS.beginText;\n      case 1:\n        return fnArray[i] === _util.OPS.setFont;\n      case 2:\n        return fnArray[i] === _util.OPS.setTextMatrix;\n      case 3:\n        if (fnArray[i] !== _util.OPS.showText) {\n          return false;\n        }\n        var iFirstSetFont = context.iCurr - 3;\n        var firstSetFontArg0 = argsArray[iFirstSetFont][0];\n        var 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] === _util.OPS.endText;\n    }\n  }, function (context, i) {\n    var MIN_CHARS_IN_BLOCK = 3;\n    var MAX_CHARS_IN_BLOCK = 1000;\n    var fnArray = context.fnArray,\n        argsArray = context.argsArray;\n    var curr = context.iCurr;\n    var iFirstBeginText = curr - 4;\n    var iFirstSetFont = curr - 3;\n    var iFirstSetTextMatrix = curr - 2;\n    var iFirstShowText = curr - 1;\n    var iFirstEndText = curr;\n    var firstSetFontArg0 = argsArray[iFirstSetFont][0];\n    var firstSetFontArg1 = argsArray[iFirstSetFont][1];\n    var 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    var 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    var iEndText = iFirst + 4;\n    for (var q = 1; q < count; q++) {\n      fnArray.splice(iEndText, 3);\n      argsArray.splice(iEndText, 3);\n      iEndText += 2;\n    }\n    return iEndText + 1;\n  });\n  function QueueOptimizer(queue) {\n    this.queue = queue;\n    this.state = null;\n    this.context = {\n      iCurr: 0,\n      fnArray: queue.fnArray,\n      argsArray: queue.argsArray\n    };\n    this.match = null;\n    this.lastProcessed = 0;\n  }\n  QueueOptimizer.prototype = {\n    _optimize: function _optimize() {\n      var fnArray = this.queue.fnArray;\n      var i = this.lastProcessed,\n          ii = fnArray.length;\n      var state = this.state;\n      var match = this.match;\n      if (!state && !match && i + 1 === ii && !InitialState[fnArray[i]]) {\n        this.lastProcessed = ii;\n        return;\n      }\n      var context = this.context;\n      while (i < ii) {\n        if (match) {\n          var 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    push: function push(fn, args) {\n      this.queue.fnArray.push(fn);\n      this.queue.argsArray.push(args);\n      this._optimize();\n    },\n    flush: function flush() {\n      while (this.match) {\n        var 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: function reset() {\n      this.state = null;\n      this.match = null;\n      this.lastProcessed = 0;\n    }\n  };\n  return QueueOptimizer;\n}();\nvar NullOptimizer = function NullOptimizerClosure() {\n  function NullOptimizer(queue) {\n    this.queue = queue;\n  }\n  NullOptimizer.prototype = {\n    push: function push(fn, args) {\n      this.queue.fnArray.push(fn);\n      this.queue.argsArray.push(args);\n    },\n    flush: function flush() {}\n  };\n  return NullOptimizer;\n}();\nvar OperatorList = function OperatorListClosure() {\n  var CHUNK_SIZE = 1000;\n  var CHUNK_SIZE_ABOUT = CHUNK_SIZE - 5;\n  function getTransfers(queue) {\n    var transfers = [];\n    var fnArray = queue.fnArray,\n        argsArray = queue.argsArray;\n    for (var i = 0, ii = queue.length; i < ii; i++) {\n      switch (fnArray[i]) {\n        case _util.OPS.paintInlineImageXObject:\n        case _util.OPS.paintInlineImageXObjectGroup:\n        case _util.OPS.paintImageMaskXObject:\n          var arg = argsArray[i][0];\n          if (!arg.cached) {\n            transfers.push(arg.data.buffer);\n          }\n          break;\n      }\n    }\n    return transfers;\n  }\n  function OperatorList(intent, messageHandler, pageIndex) {\n    this.messageHandler = messageHandler;\n    this.fnArray = [];\n    this.argsArray = [];\n    if (messageHandler && this.intent !== 'oplist') {\n      this.optimizer = new QueueOptimizer(this);\n    } else {\n      this.optimizer = new NullOptimizer(this);\n    }\n    this.dependencies = Object.create(null);\n    this._totalLength = 0;\n    this.pageIndex = pageIndex;\n    this.intent = intent;\n    this.weight = 0;\n  }\n  OperatorList.prototype = {\n    get length() {\n      return this.argsArray.length;\n    },\n    get totalLength() {\n      return this._totalLength + this.length;\n    },\n    addOp: function addOp(fn, args) {\n      this.optimizer.push(fn, args);\n      this.weight++;\n      if (this.messageHandler) {\n        if (this.weight >= CHUNK_SIZE) {\n          this.flush();\n        } else if (this.weight >= CHUNK_SIZE_ABOUT && (fn === _util.OPS.restore || fn === _util.OPS.endText)) {\n          this.flush();\n        }\n      }\n    },\n    addDependency: function addDependency(dependency) {\n      if (dependency in this.dependencies) {\n        return;\n      }\n      this.dependencies[dependency] = true;\n      this.addOp(_util.OPS.dependency, [dependency]);\n    },\n    addDependencies: function addDependencies(dependencies) {\n      for (var key in dependencies) {\n        this.addDependency(key);\n      }\n    },\n    addOpList: function addOpList(opList) {\n      Object.assign(this.dependencies, opList.dependencies);\n      for (var i = 0, ii = opList.length; i < ii; i++) {\n        this.addOp(opList.fnArray[i], opList.argsArray[i]);\n      }\n    },\n    getIR: function getIR() {\n      return {\n        fnArray: this.fnArray,\n        argsArray: this.argsArray,\n        length: this.length\n      };\n    },\n    flush: function flush(lastChunk) {\n      this.optimizer.flush();\n      var transfers = getTransfers(this);\n      var length = this.length;\n      this._totalLength += length;\n      this.messageHandler.send('RenderPageChunk', {\n        operatorList: {\n          fnArray: this.fnArray,\n          argsArray: this.argsArray,\n          lastChunk: lastChunk,\n          length: length\n        },\n        pageIndex: this.pageIndex,\n        intent: this.intent\n      }, transfers);\n      this.dependencies = Object.create(null);\n      this.fnArray.length = 0;\n      this.argsArray.length = 0;\n      this.weight = 0;\n      this.optimizer.reset();\n    }\n  };\n  return OperatorList;\n}();\nexports.OperatorList = OperatorList;\n\n/***/ }),\n/* 139 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.PartialEvaluator = undefined;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _cmap = __w_pdfjs_require__(140);\n\nvar _stream = __w_pdfjs_require__(125);\n\nvar _primitives = __w_pdfjs_require__(123);\n\nvar _fonts = __w_pdfjs_require__(141);\n\nvar _encodings = __w_pdfjs_require__(144);\n\nvar _unicode = __w_pdfjs_require__(147);\n\nvar _standard_fonts = __w_pdfjs_require__(146);\n\nvar _pattern = __w_pdfjs_require__(150);\n\nvar _parser = __w_pdfjs_require__(124);\n\nvar _bidi = __w_pdfjs_require__(151);\n\nvar _colorspace = __w_pdfjs_require__(136);\n\nvar _glyphlist = __w_pdfjs_require__(145);\n\nvar _metrics = __w_pdfjs_require__(152);\n\nvar _function = __w_pdfjs_require__(153);\n\nvar _jpeg_stream = __w_pdfjs_require__(131);\n\nvar _murmurhash = __w_pdfjs_require__(155);\n\nvar _operator_list = __w_pdfjs_require__(138);\n\nvar _image = __w_pdfjs_require__(156);\n\nvar PartialEvaluator = function PartialEvaluatorClosure() {\n  var DefaultPartialEvaluatorOptions = {\n    forceDataSchema: false,\n    maxImageSize: -1,\n    disableFontFace: false,\n    nativeImageDecoderSupport: _util.NativeImageDecoding.DECODE,\n    ignoreErrors: false,\n    isEvalSupported: true\n  };\n  function NativeImageDecoder(_ref) {\n    var xref = _ref.xref,\n        resources = _ref.resources,\n        handler = _ref.handler,\n        _ref$forceDataSchema = _ref.forceDataSchema,\n        forceDataSchema = _ref$forceDataSchema === undefined ? false : _ref$forceDataSchema,\n        pdfFunctionFactory = _ref.pdfFunctionFactory;\n\n    this.xref = xref;\n    this.resources = resources;\n    this.handler = handler;\n    this.forceDataSchema = forceDataSchema;\n    this.pdfFunctionFactory = pdfFunctionFactory;\n  }\n  NativeImageDecoder.prototype = {\n    canDecode: function canDecode(image) {\n      return image instanceof _jpeg_stream.JpegStream && NativeImageDecoder.isDecodable(image, this.xref, this.resources, this.pdfFunctionFactory);\n    },\n    decode: function decode(image) {\n      var dict = image.dict;\n      var colorSpace = dict.get('ColorSpace', 'CS');\n      colorSpace = _colorspace.ColorSpace.parse(colorSpace, this.xref, this.resources, this.pdfFunctionFactory);\n      return this.handler.sendWithPromise('JpegDecode', [image.getIR(this.forceDataSchema), colorSpace.numComps]).then(function (_ref2) {\n        var data = _ref2.data,\n            width = _ref2.width,\n            height = _ref2.height;\n\n        return new _stream.Stream(data, 0, data.length, image.dict);\n      });\n    }\n  };\n  NativeImageDecoder.isSupported = function (image, xref, res, pdfFunctionFactory) {\n    var dict = image.dict;\n    if (dict.has('DecodeParms') || dict.has('DP')) {\n      return false;\n    }\n    var cs = _colorspace.ColorSpace.parse(dict.get('ColorSpace', 'CS'), xref, res, pdfFunctionFactory);\n    return (cs.name === 'DeviceGray' || cs.name === 'DeviceRGB') && cs.isDefaultDecode(dict.getArray('Decode', 'D'));\n  };\n  NativeImageDecoder.isDecodable = function (image, xref, res, pdfFunctionFactory) {\n    var dict = image.dict;\n    if (dict.has('DecodeParms') || dict.has('DP')) {\n      return false;\n    }\n    var cs = _colorspace.ColorSpace.parse(dict.get('ColorSpace', 'CS'), xref, res, pdfFunctionFactory);\n    return (cs.numComps === 1 || cs.numComps === 3) && cs.isDefaultDecode(dict.getArray('Decode', 'D'));\n  };\n  function PartialEvaluator(_ref3) {\n    var _this = this;\n\n    var pdfManager = _ref3.pdfManager,\n        xref = _ref3.xref,\n        handler = _ref3.handler,\n        pageIndex = _ref3.pageIndex,\n        idFactory = _ref3.idFactory,\n        fontCache = _ref3.fontCache,\n        builtInCMapCache = _ref3.builtInCMapCache,\n        _ref3$options = _ref3.options,\n        options = _ref3$options === undefined ? null : _ref3$options,\n        pdfFunctionFactory = _ref3.pdfFunctionFactory;\n\n    this.pdfManager = pdfManager;\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.options = options || DefaultPartialEvaluatorOptions;\n    this.pdfFunctionFactory = pdfFunctionFactory;\n    this.fetchBuiltInCMap = function (name) {\n      if (_this.builtInCMapCache.has(name)) {\n        return Promise.resolve(_this.builtInCMapCache.get(name));\n      }\n      return _this.handler.sendWithPromise('FetchBuiltInCMap', { name: name }).then(function (data) {\n        if (data.compressionType !== _util.CMapCompressionType.NONE) {\n          _this.builtInCMapCache.set(name, data);\n        }\n        return data;\n      });\n    };\n  }\n  var TIME_SLOT_DURATION_MS = 20;\n  var CHECK_TIME_EVERY = 100;\n  function TimeSlotManager() {\n    this.reset();\n  }\n  TimeSlotManager.prototype = {\n    check: function TimeSlotManager_check() {\n      if (++this.checked < CHECK_TIME_EVERY) {\n        return false;\n      }\n      this.checked = 0;\n      return this.endTime <= Date.now();\n    },\n    reset: function TimeSlotManager_reset() {\n      this.endTime = Date.now() + TIME_SLOT_DURATION_MS;\n      this.checked = 0;\n    }\n  };\n  function normalizeBlendMode(value) {\n    if (!(0, _primitives.isName)(value)) {\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    (0, _util.warn)('Unsupported blend mode: ' + value.name);\n    return 'source-over';\n  }\n  var deferred = Promise.resolve();\n  var TILING_PATTERN = 1,\n      SHADING_PATTERN = 2;\n  PartialEvaluator.prototype = {\n    clone: function clone() {\n      var newOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DefaultPartialEvaluatorOptions;\n\n      var newEvaluator = Object.create(this);\n      newEvaluator.options = newOptions;\n      return newEvaluator;\n    },\n\n    hasBlendModes: function PartialEvaluator_hasBlendModes(resources) {\n      if (!(0, _primitives.isDict)(resources)) {\n        return false;\n      }\n      var processed = Object.create(null);\n      if (resources.objId) {\n        processed[resources.objId] = true;\n      }\n      var nodes = [resources],\n          xref = this.xref;\n      while (nodes.length) {\n        var key, i, ii;\n        var node = nodes.shift();\n        var graphicStates = node.get('ExtGState');\n        if ((0, _primitives.isDict)(graphicStates)) {\n          var graphicStatesKeys = graphicStates.getKeys();\n          for (i = 0, ii = graphicStatesKeys.length; i < ii; i++) {\n            key = graphicStatesKeys[i];\n            var graphicState = graphicStates.get(key);\n            var bm = graphicState.get('BM');\n            if ((0, _primitives.isName)(bm) && bm.name !== 'Normal') {\n              return true;\n            }\n          }\n        }\n        var xObjects = node.get('XObject');\n        if (!(0, _primitives.isDict)(xObjects)) {\n          continue;\n        }\n        var xObjectsKeys = xObjects.getKeys();\n        for (i = 0, ii = xObjectsKeys.length; i < ii; i++) {\n          key = xObjectsKeys[i];\n          var xObject = xObjects.getRaw(key);\n          if ((0, _primitives.isRef)(xObject)) {\n            if (processed[xObject.toString()]) {\n              continue;\n            }\n            xObject = xref.fetch(xObject);\n          }\n          if (!(0, _primitives.isStream)(xObject)) {\n            continue;\n          }\n          if (xObject.dict.objId) {\n            if (processed[xObject.dict.objId]) {\n              continue;\n            }\n            processed[xObject.dict.objId] = true;\n          }\n          var xResources = xObject.dict.get('Resources');\n          if ((0, _primitives.isDict)(xResources) && (!xResources.objId || !processed[xResources.objId])) {\n            nodes.push(xResources);\n            if (xResources.objId) {\n              processed[xResources.objId] = true;\n            }\n          }\n        }\n      }\n      return false;\n    },\n    buildFormXObject: function PartialEvaluator_buildFormXObject(resources, xobj, smask, operatorList, task, initialState) {\n      var dict = xobj.dict;\n      var matrix = dict.getArray('Matrix');\n      var bbox = dict.getArray('BBox');\n      var group = dict.get('Group');\n      if (group) {\n        var groupOptions = {\n          matrix: matrix,\n          bbox: bbox,\n          smask: smask,\n          isolated: false,\n          knockout: false\n        };\n        var groupSubtype = group.get('S');\n        var colorSpace = null;\n        if ((0, _primitives.isName)(groupSubtype, 'Transparency')) {\n          groupOptions.isolated = group.get('I') || false;\n          groupOptions.knockout = group.get('K') || false;\n          if (group.has('CS')) {\n            colorSpace = _colorspace.ColorSpace.parse(group.get('CS'), this.xref, resources, this.pdfFunctionFactory);\n          }\n        }\n        if (smask && smask.backdrop) {\n          colorSpace = colorSpace || _colorspace.ColorSpace.singletons.rgb;\n          smask.backdrop = colorSpace.getRgb(smask.backdrop, 0);\n        }\n        operatorList.addOp(_util.OPS.beginGroup, [groupOptions]);\n      }\n      operatorList.addOp(_util.OPS.paintFormXObjectBegin, [matrix, bbox]);\n      return this.getOperatorList({\n        stream: xobj,\n        task: task,\n        resources: dict.get('Resources') || resources,\n        operatorList: operatorList,\n        initialState: initialState\n      }).then(function () {\n        operatorList.addOp(_util.OPS.paintFormXObjectEnd, []);\n        if (group) {\n          operatorList.addOp(_util.OPS.endGroup, [groupOptions]);\n        }\n      });\n    },\n    buildPaintImageXObject: function buildPaintImageXObject(_ref4) {\n      var _this2 = this;\n\n      var resources = _ref4.resources,\n          image = _ref4.image,\n          _ref4$isInline = _ref4.isInline,\n          isInline = _ref4$isInline === undefined ? false : _ref4$isInline,\n          operatorList = _ref4.operatorList,\n          cacheKey = _ref4.cacheKey,\n          imageCache = _ref4.imageCache,\n          _ref4$forceDisableNat = _ref4.forceDisableNativeImageDecoder,\n          forceDisableNativeImageDecoder = _ref4$forceDisableNat === undefined ? false : _ref4$forceDisableNat;\n\n      var dict = image.dict;\n      var w = dict.get('Width', 'W');\n      var h = dict.get('Height', 'H');\n      if (!(w && (0, _util.isNum)(w)) || !(h && (0, _util.isNum)(h))) {\n        (0, _util.warn)('Image dimensions are missing, or not numbers.');\n        return Promise.resolve();\n      }\n      var maxImageSize = this.options.maxImageSize;\n      if (maxImageSize !== -1 && w * h > maxImageSize) {\n        (0, _util.warn)('Image exceeded maximum allowed size and was removed.');\n        return Promise.resolve();\n      }\n      var imageMask = dict.get('ImageMask', 'IM') || false;\n      var imgData, args;\n      if (imageMask) {\n        var width = dict.get('Width', 'W');\n        var height = dict.get('Height', 'H');\n        var bitStrideLength = width + 7 >> 3;\n        var imgArray = image.getBytes(bitStrideLength * height, true);\n        var decode = dict.getArray('Decode', 'D');\n        imgData = _image.PDFImage.createMask({\n          imgArray: imgArray,\n          width: width,\n          height: height,\n          imageIsFromDecodeStream: image instanceof _stream.DecodeStream,\n          inverseDecode: !!decode && decode[0] > 0\n        });\n        imgData.cached = true;\n        args = [imgData];\n        operatorList.addOp(_util.OPS.paintImageMaskXObject, args);\n        if (cacheKey) {\n          imageCache[cacheKey] = {\n            fn: _util.OPS.paintImageMaskXObject,\n            args: args\n          };\n        }\n        return Promise.resolve();\n      }\n      var softMask = dict.get('SMask', 'SM') || false;\n      var mask = dict.get('Mask') || false;\n      var SMALL_IMAGE_DIMENSIONS = 200;\n      if (isInline && !softMask && !mask && !(image instanceof _jpeg_stream.JpegStream) && w + h < SMALL_IMAGE_DIMENSIONS) {\n        var imageObj = new _image.PDFImage({\n          xref: this.xref,\n          res: resources,\n          image: image,\n          isInline: isInline,\n          pdfFunctionFactory: this.pdfFunctionFactory\n        });\n        imgData = imageObj.createImageData(true);\n        operatorList.addOp(_util.OPS.paintInlineImageXObject, [imgData]);\n        return Promise.resolve();\n      }\n      var nativeImageDecoderSupport = forceDisableNativeImageDecoder ? _util.NativeImageDecoding.NONE : this.options.nativeImageDecoderSupport;\n      var objId = 'img_' + this.idFactory.createObjId();\n      if (nativeImageDecoderSupport !== _util.NativeImageDecoding.NONE && !softMask && !mask && image instanceof _jpeg_stream.JpegStream && NativeImageDecoder.isSupported(image, this.xref, resources, this.pdfFunctionFactory)) {\n        return this.handler.sendWithPromise('obj', [objId, this.pageIndex, 'JpegStream', image.getIR(this.options.forceDataSchema)]).then(function () {\n          operatorList.addDependency(objId);\n          args = [objId, w, h];\n          operatorList.addOp(_util.OPS.paintJpegXObject, args);\n          if (cacheKey) {\n            imageCache[cacheKey] = {\n              fn: _util.OPS.paintJpegXObject,\n              args: args\n            };\n          }\n        }, function (reason) {\n          (0, _util.warn)('Native JPEG decoding failed -- trying to recover: ' + (reason && reason.message));\n          return _this2.buildPaintImageXObject({\n            resources: resources,\n            image: image,\n            isInline: isInline,\n            operatorList: operatorList,\n            cacheKey: cacheKey,\n            imageCache: imageCache,\n            forceDisableNativeImageDecoder: true\n          });\n        });\n      }\n      var nativeImageDecoder = null;\n      if (nativeImageDecoderSupport === _util.NativeImageDecoding.DECODE && (image instanceof _jpeg_stream.JpegStream || mask instanceof _jpeg_stream.JpegStream || softMask instanceof _jpeg_stream.JpegStream)) {\n        nativeImageDecoder = new NativeImageDecoder({\n          xref: this.xref,\n          resources: resources,\n          handler: this.handler,\n          forceDataSchema: this.options.forceDataSchema,\n          pdfFunctionFactory: this.pdfFunctionFactory\n        });\n      }\n      operatorList.addDependency(objId);\n      args = [objId, w, h];\n      _image.PDFImage.buildImage({\n        handler: this.handler,\n        xref: this.xref,\n        res: resources,\n        image: image,\n        isInline: isInline,\n        nativeDecoder: nativeImageDecoder,\n        pdfFunctionFactory: this.pdfFunctionFactory\n      }).then(function (imageObj) {\n        var imgData = imageObj.createImageData(false);\n        _this2.handler.send('obj', [objId, _this2.pageIndex, 'Image', imgData], [imgData.data.buffer]);\n      }).catch(function (reason) {\n        (0, _util.warn)('Unable to decode image: ' + reason);\n        _this2.handler.send('obj', [objId, _this2.pageIndex, 'Image', null]);\n      });\n      operatorList.addOp(_util.OPS.paintImageXObject, args);\n      if (cacheKey) {\n        imageCache[cacheKey] = {\n          fn: _util.OPS.paintImageXObject,\n          args: args\n        };\n      }\n      return Promise.resolve();\n    },\n\n    handleSMask: function PartialEvaluator_handleSmask(smask, resources, operatorList, task, stateManager) {\n      var smaskContent = smask.get('G');\n      var smaskOptions = {\n        subtype: smask.get('S').name,\n        backdrop: smask.get('BC')\n      };\n      var transferObj = smask.get('TR');\n      if ((0, _function.isPDFFunction)(transferObj)) {\n        var transferFn = this.pdfFunctionFactory.create(transferObj);\n        var transferMap = new Uint8Array(256);\n        var tmp = new Float32Array(1);\n        for (var 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());\n    },\n    handleTilingType: function handleTilingType(fn, args, resources, pattern, patternDict, operatorList, task) {\n      var _this3 = this;\n\n      var tilingOpList = new _operator_list.OperatorList();\n      var resourcesArray = [patternDict.get('Resources'), resources];\n      var patternResources = _primitives.Dict.merge(this.xref, resourcesArray);\n      return this.getOperatorList({\n        stream: pattern,\n        task: task,\n        resources: patternResources,\n        operatorList: tilingOpList\n      }).then(function () {\n        return (0, _pattern.getTilingPatternIR)({\n          fnArray: tilingOpList.fnArray,\n          argsArray: tilingOpList.argsArray\n        }, patternDict, args);\n      }).then(function (tilingPatternIR) {\n        operatorList.addDependencies(tilingOpList.dependencies);\n        operatorList.addOp(fn, tilingPatternIR);\n      }, function (reason) {\n        if (_this3.options.ignoreErrors) {\n          _this3.handler.send('UnsupportedFeature', { featureId: _util.UNSUPPORTED_FEATURES.unknown });\n          (0, _util.warn)('handleTilingType - ignoring pattern: \"' + reason + '\".');\n          return;\n        }\n        throw reason;\n      });\n    },\n\n    handleSetFont: function PartialEvaluator_handleSetFont(resources, fontArgs, fontRef, operatorList, task, state) {\n      var _this4 = this;\n\n      var fontName;\n      if (fontArgs) {\n        fontArgs = fontArgs.slice();\n        fontName = fontArgs[0].name;\n      }\n      return this.loadFont(fontName, fontRef, resources).then(function (translated) {\n        if (!translated.font.isType3Font) {\n          return translated;\n        }\n        return translated.loadType3Data(_this4, resources, operatorList, task).then(function () {\n          return translated;\n        }).catch(function (reason) {\n          _this4.handler.send('UnsupportedFeature', { featureId: _util.UNSUPPORTED_FEATURES.font });\n          return new TranslatedFont('g_font_error', new _fonts.ErrorFont('Type3 font load error: ' + reason), translated.font);\n        });\n      }).then(function (translated) {\n        state.font = translated.font;\n        translated.send(_this4.handler);\n        return translated.loadedName;\n      });\n    },\n    handleText: function PartialEvaluator_handleText(chars, state) {\n      var _this5 = this;\n\n      var font = state.font;\n      var glyphs = font.charsToGlyphs(chars);\n      var isAddToPathSet = !!(state.textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG);\n      if (font.data && (isAddToPathSet || this.options.disableFontFace || state.fillColorSpace.name === 'Pattern')) {\n        var buildPath = function buildPath(fontChar) {\n          if (!font.renderer.hasBuiltPath(fontChar)) {\n            var path = font.renderer.getPathJs(fontChar);\n            _this5.handler.send('commonobj', [font.loadedName + '_path_' + fontChar, 'FontPath', path]);\n          }\n        };\n        for (var i = 0, ii = glyphs.length; i < ii; i++) {\n          var glyph = glyphs[i];\n          buildPath(glyph.fontChar);\n          var accent = glyph.accent;\n          if (accent && accent.fontChar) {\n            buildPath(accent.fontChar);\n          }\n        }\n      }\n      return glyphs;\n    },\n    setGState: function PartialEvaluator_setGState(resources, gState, operatorList, task, stateManager) {\n      var _this6 = this;\n\n      var gStateObj = [];\n      var gStateKeys = gState.getKeys();\n      var promise = Promise.resolve();\n\n      var _loop = function _loop() {\n        var key = gStateKeys[i];\n        var 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            promise = promise.then(function () {\n              return _this6.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            });\n            break;\n          case 'BM':\n            gStateObj.push([key, normalizeBlendMode(value)]);\n            break;\n          case 'SMask':\n            if ((0, _primitives.isName)(value, 'None')) {\n              gStateObj.push([key, false]);\n              break;\n            }\n            if ((0, _primitives.isDict)(value)) {\n              promise = promise.then(function () {\n                return _this6.handleSMask(value, resources, operatorList, task, stateManager);\n              });\n              gStateObj.push([key, true]);\n            } else {\n              (0, _util.warn)('Unsupported SMask type');\n            }\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 'TR':\n          case 'TR2':\n          case 'HT':\n          case 'SM':\n          case 'SA':\n          case 'AIS':\n          case 'TK':\n            (0, _util.info)('graphic state operator ' + key);\n            break;\n          default:\n            (0, _util.info)('Unknown graphic state operator ' + key);\n            break;\n        }\n      };\n\n      for (var i = 0, ii = gStateKeys.length; i < ii; i++) {\n        _loop();\n      }\n      return promise.then(function () {\n        if (gStateObj.length > 0) {\n          operatorList.addOp(_util.OPS.setGState, [gStateObj]);\n        }\n      });\n    },\n    loadFont: function PartialEvaluator_loadFont(fontName, font, resources) {\n      var _this7 = this;\n\n      function errorFont() {\n        return Promise.resolve(new TranslatedFont('g_font_error', new _fonts.ErrorFont('Font ' + fontName + ' is not available'), font));\n      }\n      var fontRef,\n          xref = this.xref;\n      if (font) {\n        if (!(0, _primitives.isRef)(font)) {\n          throw new Error('The \"font\" object should be a reference.');\n        }\n        fontRef = font;\n      } else {\n        var fontRes = resources.get('Font');\n        if (fontRes) {\n          fontRef = fontRes.getRaw(fontName);\n        } else {\n          (0, _util.warn)('fontRes not available');\n          return errorFont();\n        }\n      }\n      if (!fontRef) {\n        (0, _util.warn)('fontRef not available');\n        return errorFont();\n      }\n      if (this.fontCache.has(fontRef)) {\n        return this.fontCache.get(fontRef);\n      }\n      font = xref.fetchIfRef(fontRef);\n      if (!(0, _primitives.isDict)(font)) {\n        return errorFont();\n      }\n      if (font.translated) {\n        return font.translated;\n      }\n      var fontCapability = (0, _util.createPromiseCapability)();\n      var preEvaluatedFont = this.preEvaluateFont(font);\n      var descriptor = preEvaluatedFont.descriptor;\n      var fontRefIsRef = (0, _primitives.isRef)(fontRef),\n          fontID;\n      if (fontRefIsRef) {\n        fontID = fontRef.toString();\n      }\n      if ((0, _primitives.isDict)(descriptor)) {\n        if (!descriptor.fontAliases) {\n          descriptor.fontAliases = Object.create(null);\n        }\n        var fontAliases = descriptor.fontAliases;\n        var hash = preEvaluatedFont.hash;\n        if (fontAliases[hash]) {\n          var 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] = { fontID: _fonts.Font.getFontID() };\n        }\n        if (fontRefIsRef) {\n          fontAliases[hash].aliasRef = fontRef;\n        }\n        fontID = fontAliases[hash].fontID;\n      }\n      if (fontRefIsRef) {\n        this.fontCache.put(fontRef, fontCapability.promise);\n      } else {\n        if (!fontID) {\n          fontID = this.idFactory.createObjId();\n        }\n        this.fontCache.put('id_' + fontID, fontCapability.promise);\n      }\n      (0, _util.assert)(fontID, 'The \"fontID\" must be defined.');\n      font.loadedName = 'g_' + this.pdfManager.docId + '_f' + fontID;\n      font.translated = fontCapability.promise;\n      var translatedPromise;\n      try {\n        translatedPromise = this.translateFont(preEvaluatedFont);\n      } catch (e) {\n        translatedPromise = Promise.reject(e);\n      }\n      translatedPromise.then(function (translatedFont) {\n        if (translatedFont.fontType !== undefined) {\n          var xrefFontStats = xref.stats.fontTypes;\n          xrefFontStats[translatedFont.fontType] = true;\n        }\n        fontCapability.resolve(new TranslatedFont(font.loadedName, translatedFont, font));\n      }).catch(function (reason) {\n        _this7.handler.send('UnsupportedFeature', { featureId: _util.UNSUPPORTED_FEATURES.font });\n        try {\n          var descriptor = preEvaluatedFont.descriptor;\n          var fontFile3 = descriptor && descriptor.get('FontFile3');\n          var subtype = fontFile3 && fontFile3.get('Subtype');\n          var fontType = (0, _fonts.getFontType)(preEvaluatedFont.type, subtype && subtype.name);\n          var xrefFontStats = xref.stats.fontTypes;\n          xrefFontStats[fontType] = true;\n        } catch (ex) {}\n        fontCapability.resolve(new TranslatedFont(font.loadedName, new _fonts.ErrorFont(reason instanceof Error ? reason.message : reason), font));\n      });\n      return fontCapability.promise;\n    },\n    buildPath: function PartialEvaluator_buildPath(operatorList, fn, args) {\n      var lastIndex = operatorList.length - 1;\n      if (!args) {\n        args = [];\n      }\n      if (lastIndex < 0 || operatorList.fnArray[lastIndex] !== _util.OPS.constructPath) {\n        operatorList.addOp(_util.OPS.constructPath, [[fn], args]);\n      } else {\n        var opArgs = operatorList.argsArray[lastIndex];\n        opArgs[0].push(fn);\n        Array.prototype.push.apply(opArgs[1], args);\n      }\n    },\n    handleColorN: function PartialEvaluator_handleColorN(operatorList, fn, args, cs, patterns, resources, task) {\n      var patternName = args[args.length - 1];\n      var pattern;\n      if ((0, _primitives.isName)(patternName) && (pattern = patterns.get(patternName.name))) {\n        var dict = (0, _primitives.isStream)(pattern) ? pattern.dict : pattern;\n        var typeNum = dict.get('PatternType');\n        if (typeNum === TILING_PATTERN) {\n          var color = cs.base ? cs.base.getRgb(args, 0) : null;\n          return this.handleTilingType(fn, color, resources, pattern, dict, operatorList, task);\n        } else if (typeNum === SHADING_PATTERN) {\n          var shading = dict.get('Shading');\n          var matrix = dict.getArray('Matrix');\n          pattern = _pattern.Pattern.parseShading(shading, matrix, this.xref, resources, this.handler, this.pdfFunctionFactory);\n          operatorList.addOp(fn, pattern.getIR());\n          return Promise.resolve();\n        }\n        return Promise.reject(new Error('Unknown PatternType: ' + typeNum));\n      }\n      operatorList.addOp(fn, args);\n      return Promise.resolve();\n    },\n    getOperatorList: function getOperatorList(_ref5) {\n      var _this8 = this;\n\n      var stream = _ref5.stream,\n          task = _ref5.task,\n          resources = _ref5.resources,\n          operatorList = _ref5.operatorList,\n          _ref5$initialState = _ref5.initialState,\n          initialState = _ref5$initialState === undefined ? null : _ref5$initialState;\n\n      resources = resources || _primitives.Dict.empty;\n      initialState = initialState || new EvalState();\n      if (!operatorList) {\n        throw new Error('getOperatorList: missing \"operatorList\" parameter');\n      }\n      var self = this;\n      var xref = this.xref;\n      var imageCache = Object.create(null);\n      var xobjs = resources.get('XObject') || _primitives.Dict.empty;\n      var patterns = resources.get('Pattern') || _primitives.Dict.empty;\n      var stateManager = new StateManager(initialState);\n      var preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager);\n      var timeSlotManager = new TimeSlotManager();\n      function closePendingRestoreOPS(argument) {\n        for (var i = 0, ii = preprocessor.savedStatesDepth; i < ii; i++) {\n          operatorList.addOp(_util.OPS.restore, []);\n        }\n      }\n      return new Promise(function promiseBody(resolve, reject) {\n        var next = function next(promise) {\n          promise.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        var stop,\n            operation = {},\n            i,\n            ii,\n            cs;\n        while (!(stop = timeSlotManager.check())) {\n          operation.args = null;\n          if (!preprocessor.read(operation)) {\n            break;\n          }\n          var args = operation.args;\n          var fn = operation.fn;\n          switch (fn | 0) {\n            case _util.OPS.paintXObject:\n              var name = args[0].name;\n              if (name && imageCache[name] !== undefined) {\n                operatorList.addOp(imageCache[name].fn, imageCache[name].args);\n                args = null;\n                continue;\n              }\n              next(new Promise(function (resolveXObject, rejectXObject) {\n                if (!name) {\n                  throw new _util.FormatError('XObject must be referred to by name.');\n                }\n                var xobj = xobjs.get(name);\n                if (!xobj) {\n                  operatorList.addOp(fn, args);\n                  resolveXObject();\n                  return;\n                }\n                if (!(0, _primitives.isStream)(xobj)) {\n                  throw new _util.FormatError('XObject should be a stream');\n                }\n                var type = xobj.dict.get('Subtype');\n                if (!(0, _primitives.isName)(type)) {\n                  throw new _util.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()).then(function () {\n                    stateManager.restore();\n                    resolveXObject();\n                  }, rejectXObject);\n                  return;\n                } else if (type.name === 'Image') {\n                  self.buildPaintImageXObject({\n                    resources: resources,\n                    image: xobj,\n                    operatorList: operatorList,\n                    cacheKey: name,\n                    imageCache: imageCache\n                  }).then(resolveXObject, rejectXObject);\n                  return;\n                } else if (type.name === 'PS') {\n                  (0, _util.info)('Ignored XObject subtype PS');\n                } else {\n                  throw new _util.FormatError('Unhandled XObject subtype ' + type.name);\n                }\n                resolveXObject();\n              }).catch(function (reason) {\n                if (self.options.ignoreErrors) {\n                  self.handler.send('UnsupportedFeature', { featureId: _util.UNSUPPORTED_FEATURES.unknown });\n                  (0, _util.warn)('getOperatorList - ignoring XObject: \"' + reason + '\".');\n                  return;\n                }\n                throw reason;\n              }));\n              return;\n            case _util.OPS.setFont:\n              var fontSize = args[1];\n              next(self.handleSetFont(resources, args, null, operatorList, task, stateManager.state).then(function (loadedName) {\n                operatorList.addDependency(loadedName);\n                operatorList.addOp(_util.OPS.setFont, [loadedName, fontSize]);\n              }));\n              return;\n            case _util.OPS.endInlineImage:\n              var cacheKey = args[0].cacheKey;\n              if (cacheKey) {\n                var cacheEntry = imageCache[cacheKey];\n                if (cacheEntry !== undefined) {\n                  operatorList.addOp(cacheEntry.fn, cacheEntry.args);\n                  args = null;\n                  continue;\n                }\n              }\n              next(self.buildPaintImageXObject({\n                resources: resources,\n                image: args[0],\n                isInline: true,\n                operatorList: operatorList,\n                cacheKey: cacheKey,\n                imageCache: imageCache\n              }));\n              return;\n            case _util.OPS.showText:\n              args[0] = self.handleText(args[0], stateManager.state);\n              break;\n            case _util.OPS.showSpacedText:\n              var arr = args[0];\n              var combinedGlyphs = [];\n              var arrLength = arr.length;\n              var state = stateManager.state;\n              for (i = 0; i < arrLength; ++i) {\n                var arrItem = arr[i];\n                if ((0, _util.isString)(arrItem)) {\n                  Array.prototype.push.apply(combinedGlyphs, self.handleText(arrItem, state));\n                } else if ((0, _util.isNum)(arrItem)) {\n                  combinedGlyphs.push(arrItem);\n                }\n              }\n              args[0] = combinedGlyphs;\n              fn = _util.OPS.showText;\n              break;\n            case _util.OPS.nextLineShowText:\n              operatorList.addOp(_util.OPS.nextLine);\n              args[0] = self.handleText(args[0], stateManager.state);\n              fn = _util.OPS.showText;\n              break;\n            case _util.OPS.nextLineSetSpacingShowText:\n              operatorList.addOp(_util.OPS.nextLine);\n              operatorList.addOp(_util.OPS.setWordSpacing, [args.shift()]);\n              operatorList.addOp(_util.OPS.setCharSpacing, [args.shift()]);\n              args[0] = self.handleText(args[0], stateManager.state);\n              fn = _util.OPS.showText;\n              break;\n            case _util.OPS.setTextRenderingMode:\n              stateManager.state.textRenderingMode = args[0];\n              break;\n            case _util.OPS.setFillColorSpace:\n              stateManager.state.fillColorSpace = _colorspace.ColorSpace.parse(args[0], xref, resources, self.pdfFunctionFactory);\n              continue;\n            case _util.OPS.setStrokeColorSpace:\n              stateManager.state.strokeColorSpace = _colorspace.ColorSpace.parse(args[0], xref, resources, self.pdfFunctionFactory);\n              continue;\n            case _util.OPS.setFillColor:\n              cs = stateManager.state.fillColorSpace;\n              args = cs.getRgb(args, 0);\n              fn = _util.OPS.setFillRGBColor;\n              break;\n            case _util.OPS.setStrokeColor:\n              cs = stateManager.state.strokeColorSpace;\n              args = cs.getRgb(args, 0);\n              fn = _util.OPS.setStrokeRGBColor;\n              break;\n            case _util.OPS.setFillGray:\n              stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.gray;\n              args = _colorspace.ColorSpace.singletons.gray.getRgb(args, 0);\n              fn = _util.OPS.setFillRGBColor;\n              break;\n            case _util.OPS.setStrokeGray:\n              stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.gray;\n              args = _colorspace.ColorSpace.singletons.gray.getRgb(args, 0);\n              fn = _util.OPS.setStrokeRGBColor;\n              break;\n            case _util.OPS.setFillCMYKColor:\n              stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.cmyk;\n              args = _colorspace.ColorSpace.singletons.cmyk.getRgb(args, 0);\n              fn = _util.OPS.setFillRGBColor;\n              break;\n            case _util.OPS.setStrokeCMYKColor:\n              stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.cmyk;\n              args = _colorspace.ColorSpace.singletons.cmyk.getRgb(args, 0);\n              fn = _util.OPS.setStrokeRGBColor;\n              break;\n            case _util.OPS.setFillRGBColor:\n              stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.rgb;\n              args = _colorspace.ColorSpace.singletons.rgb.getRgb(args, 0);\n              break;\n            case _util.OPS.setStrokeRGBColor:\n              stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.rgb;\n              args = _colorspace.ColorSpace.singletons.rgb.getRgb(args, 0);\n              break;\n            case _util.OPS.setFillColorN:\n              cs = stateManager.state.fillColorSpace;\n              if (cs.name === 'Pattern') {\n                next(self.handleColorN(operatorList, _util.OPS.setFillColorN, args, cs, patterns, resources, task));\n                return;\n              }\n              args = cs.getRgb(args, 0);\n              fn = _util.OPS.setFillRGBColor;\n              break;\n            case _util.OPS.setStrokeColorN:\n              cs = stateManager.state.strokeColorSpace;\n              if (cs.name === 'Pattern') {\n                next(self.handleColorN(operatorList, _util.OPS.setStrokeColorN, args, cs, patterns, resources, task));\n                return;\n              }\n              args = cs.getRgb(args, 0);\n              fn = _util.OPS.setStrokeRGBColor;\n              break;\n            case _util.OPS.shadingFill:\n              var shadingRes = resources.get('Shading');\n              if (!shadingRes) {\n                throw new _util.FormatError('No shading resource found');\n              }\n              var shading = shadingRes.get(args[0].name);\n              if (!shading) {\n                throw new _util.FormatError('No shading object found');\n              }\n              var shadingFill = _pattern.Pattern.parseShading(shading, null, xref, resources, self.handler, self.pdfFunctionFactory);\n              var patternIR = shadingFill.getIR();\n              args = [patternIR];\n              fn = _util.OPS.shadingFill;\n              break;\n            case _util.OPS.setGState:\n              var dictName = args[0];\n              var extGState = resources.get('ExtGState');\n              if (!(0, _primitives.isDict)(extGState) || !extGState.has(dictName.name)) {\n                break;\n              }\n              var gState = extGState.get(dictName.name);\n              next(self.setGState(resources, gState, operatorList, task, stateManager));\n              return;\n            case _util.OPS.moveTo:\n            case _util.OPS.lineTo:\n            case _util.OPS.curveTo:\n            case _util.OPS.curveTo2:\n            case _util.OPS.curveTo3:\n            case _util.OPS.closePath:\n              self.buildPath(operatorList, fn, args);\n              continue;\n            case _util.OPS.rectangle:\n              self.buildPath(operatorList, fn, args);\n              continue;\n            case _util.OPS.markPoint:\n            case _util.OPS.markPointProps:\n            case _util.OPS.beginMarkedContent:\n            case _util.OPS.beginMarkedContentProps:\n            case _util.OPS.endMarkedContent:\n            case _util.OPS.beginCompat:\n            case _util.OPS.endCompat:\n              continue;\n            default:\n              if (args !== null) {\n                for (i = 0, ii = args.length; i < ii; i++) {\n                  if (args[i] instanceof _primitives.Dict) {\n                    break;\n                  }\n                }\n                if (i < ii) {\n                  (0, _util.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(function (reason) {\n        if (_this8.options.ignoreErrors) {\n          _this8.handler.send('UnsupportedFeature', { featureId: _util.UNSUPPORTED_FEATURES.unknown });\n          (0, _util.warn)('getOperatorList - ignoring errors during \"' + task.name + '\" ' + ('task: \"' + reason + '\".'));\n          closePendingRestoreOPS();\n          return;\n        }\n        throw reason;\n      });\n    },\n    getTextContent: function getTextContent(_ref6) {\n      var _this9 = this;\n\n      var stream = _ref6.stream,\n          task = _ref6.task,\n          resources = _ref6.resources,\n          _ref6$stateManager = _ref6.stateManager,\n          stateManager = _ref6$stateManager === undefined ? null : _ref6$stateManager,\n          _ref6$normalizeWhites = _ref6.normalizeWhitespace,\n          normalizeWhitespace = _ref6$normalizeWhites === undefined ? false : _ref6$normalizeWhites,\n          _ref6$combineTextItem = _ref6.combineTextItems,\n          combineTextItems = _ref6$combineTextItem === undefined ? false : _ref6$combineTextItem,\n          sink = _ref6.sink,\n          _ref6$seenStyles = _ref6.seenStyles,\n          seenStyles = _ref6$seenStyles === undefined ? Object.create(null) : _ref6$seenStyles;\n\n      resources = resources || _primitives.Dict.empty;\n      stateManager = stateManager || new StateManager(new TextState());\n      var WhitespaceRegexp = /\\s/g;\n      var textContent = {\n        items: [],\n        styles: Object.create(null)\n      };\n      var textContentItem = {\n        initialized: false,\n        str: [],\n        width: 0,\n        height: 0,\n        vertical: false,\n        lastAdvanceWidth: 0,\n        lastAdvanceHeight: 0,\n        textAdvanceScale: 0,\n        spaceWidth: 0,\n        fakeSpaceMin: Infinity,\n        fakeMultiSpaceMin: Infinity,\n        fakeMultiSpaceMax: -0,\n        textRunBreakAllowed: false,\n        transform: null,\n        fontName: null\n      };\n      var SPACE_FACTOR = 0.3;\n      var MULTI_SPACE_FACTOR = 1.5;\n      var MULTI_SPACE_FACTOR_MAX = 4;\n      var self = this;\n      var xref = this.xref;\n      var xobjs = null;\n      var skipEmptyXObjs = Object.create(null);\n      var preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager);\n      var textState;\n      function ensureTextContentItem() {\n        if (textContentItem.initialized) {\n          return textContentItem;\n        }\n        var font = textState.font;\n        if (!(font.loadedName in seenStyles)) {\n          seenStyles[font.loadedName] = true;\n          textContent.styles[font.loadedName] = {\n            fontFamily: font.fallbackName,\n            ascent: font.ascent,\n            descent: font.descent,\n            vertical: font.vertical\n          };\n        }\n        textContentItem.fontName = font.loadedName;\n        var tsm = [textState.fontSize * textState.textHScale, 0, 0, textState.fontSize, 0, textState.textRise];\n        if (font.isType3Font && textState.fontMatrix !== _util.FONT_IDENTITY_MATRIX && textState.fontSize === 1) {\n          var glyphHeight = font.bbox[3] - font.bbox[1];\n          if (glyphHeight > 0) {\n            glyphHeight = glyphHeight * textState.fontMatrix[3];\n            tsm[3] *= glyphHeight;\n          }\n        }\n        var trm = _util.Util.transform(textState.ctm, _util.Util.transform(textState.textMatrix, tsm));\n        textContentItem.transform = trm;\n        if (!font.vertical) {\n          textContentItem.width = 0;\n          textContentItem.height = Math.sqrt(trm[2] * trm[2] + trm[3] * trm[3]);\n          textContentItem.vertical = false;\n        } else {\n          textContentItem.width = Math.sqrt(trm[0] * trm[0] + trm[1] * trm[1]);\n          textContentItem.height = 0;\n          textContentItem.vertical = true;\n        }\n        var a = textState.textLineMatrix[0];\n        var b = textState.textLineMatrix[1];\n        var scaleLineX = Math.sqrt(a * a + b * b);\n        a = textState.ctm[0];\n        b = textState.ctm[1];\n        var scaleCtmX = Math.sqrt(a * a + b * b);\n        textContentItem.textAdvanceScale = scaleCtmX * scaleLineX;\n        textContentItem.lastAdvanceWidth = 0;\n        textContentItem.lastAdvanceHeight = 0;\n        var spaceWidth = font.spaceWidth / 1000 * textState.fontSize;\n        if (spaceWidth) {\n          textContentItem.spaceWidth = spaceWidth;\n          textContentItem.fakeSpaceMin = spaceWidth * SPACE_FACTOR;\n          textContentItem.fakeMultiSpaceMin = spaceWidth * MULTI_SPACE_FACTOR;\n          textContentItem.fakeMultiSpaceMax = spaceWidth * MULTI_SPACE_FACTOR_MAX;\n          textContentItem.textRunBreakAllowed = !font.isMonospace;\n        } else {\n          textContentItem.spaceWidth = 0;\n          textContentItem.fakeSpaceMin = Infinity;\n          textContentItem.fakeMultiSpaceMin = Infinity;\n          textContentItem.fakeMultiSpaceMax = 0;\n          textContentItem.textRunBreakAllowed = false;\n        }\n        textContentItem.initialized = true;\n        return textContentItem;\n      }\n      function replaceWhitespace(str) {\n        var i = 0,\n            ii = str.length,\n            code;\n        while (i < ii && (code = str.charCodeAt(i)) >= 0x20 && code <= 0x7F) {\n          i++;\n        }\n        return i < ii ? str.replace(WhitespaceRegexp, ' ') : str;\n      }\n      function runBidiTransform(textChunk) {\n        var str = textChunk.str.join('');\n        var bidiResult = (0, _bidi.bidi)(str, -1, textChunk.vertical);\n        return {\n          str: normalizeWhitespace ? replaceWhitespace(bidiResult.str) : bidiResult.str,\n          dir: bidiResult.dir,\n          width: textChunk.width,\n          height: textChunk.height,\n          transform: textChunk.transform,\n          fontName: textChunk.fontName\n        };\n      }\n      function handleSetFont(fontName, fontRef) {\n        return self.loadFont(fontName, fontRef, resources).then(function (translated) {\n          textState.font = translated.font;\n          textState.fontMatrix = translated.font.fontMatrix || _util.FONT_IDENTITY_MATRIX;\n        });\n      }\n      function buildTextContentItem(chars) {\n        var font = textState.font;\n        var textChunk = ensureTextContentItem();\n        var width = 0;\n        var height = 0;\n        var glyphs = font.charsToGlyphs(chars);\n        for (var i = 0; i < glyphs.length; i++) {\n          var glyph = glyphs[i];\n          var glyphWidth = null;\n          if (font.vertical && glyph.vmetric) {\n            glyphWidth = glyph.vmetric[0];\n          } else {\n            glyphWidth = glyph.width;\n          }\n          var glyphUnicode = glyph.unicode;\n          var NormalizedUnicodes = (0, _unicode.getNormalizedUnicodes)();\n          if (NormalizedUnicodes[glyphUnicode] !== undefined) {\n            glyphUnicode = NormalizedUnicodes[glyphUnicode];\n          }\n          glyphUnicode = (0, _unicode.reverseIfRtl)(glyphUnicode);\n          var charSpacing = textState.charSpacing;\n          if (glyph.isSpace) {\n            var wordSpacing = textState.wordSpacing;\n            charSpacing += wordSpacing;\n            if (wordSpacing > 0) {\n              addFakeSpaces(wordSpacing, textChunk.str);\n            }\n          }\n          var tx = 0;\n          var ty = 0;\n          if (!font.vertical) {\n            var w0 = glyphWidth * textState.fontMatrix[0];\n            tx = (w0 * textState.fontSize + charSpacing) * textState.textHScale;\n            width += tx;\n          } else {\n            var w1 = glyphWidth * textState.fontMatrix[0];\n            ty = w1 * textState.fontSize + charSpacing;\n            height += ty;\n          }\n          textState.translateTextMatrix(tx, ty);\n          textChunk.str.push(glyphUnicode);\n        }\n        if (!font.vertical) {\n          textChunk.lastAdvanceWidth = width;\n          textChunk.width += width;\n        } else {\n          textChunk.lastAdvanceHeight = height;\n          textChunk.height += Math.abs(height);\n        }\n        return textChunk;\n      }\n      function addFakeSpaces(width, strBuf) {\n        if (width < textContentItem.fakeSpaceMin) {\n          return;\n        }\n        if (width < textContentItem.fakeMultiSpaceMin) {\n          strBuf.push(' ');\n          return;\n        }\n        var fakeSpaces = Math.round(width / textContentItem.spaceWidth);\n        while (fakeSpaces-- > 0) {\n          strBuf.push(' ');\n        }\n      }\n      function flushTextContentItem() {\n        if (!textContentItem.initialized) {\n          return;\n        }\n        textContentItem.width *= textContentItem.textAdvanceScale;\n        textContentItem.height *= textContentItem.textAdvanceScale;\n        textContent.items.push(runBidiTransform(textContentItem));\n        textContentItem.initialized = false;\n        textContentItem.str.length = 0;\n      }\n      function enqueueChunk() {\n        var length = textContent.items.length;\n        if (length > 0) {\n          sink.enqueue(textContent, length);\n          textContent.items = [];\n          textContent.styles = Object.create(null);\n        }\n      }\n      var timeSlotManager = new TimeSlotManager();\n      return new Promise(function promiseBody(resolve, reject) {\n        var next = function next(promise) {\n          enqueueChunk();\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        var stop,\n            operation = {},\n            args = [];\n        while (!(stop = timeSlotManager.check())) {\n          args.length = 0;\n          operation.args = args;\n          if (!preprocessor.read(operation)) {\n            break;\n          }\n          textState = stateManager.state;\n          var fn = operation.fn;\n          args = operation.args;\n          var advance, diff;\n          switch (fn | 0) {\n            case _util.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 _util.OPS.setTextRise:\n              flushTextContentItem();\n              textState.textRise = args[0];\n              break;\n            case _util.OPS.setHScale:\n              flushTextContentItem();\n              textState.textHScale = args[0] / 100;\n              break;\n            case _util.OPS.setLeading:\n              flushTextContentItem();\n              textState.leading = args[0];\n              break;\n            case _util.OPS.moveText:\n              var isSameTextLine = !textState.font ? false : (textState.font.vertical ? args[0] : args[1]) === 0;\n              advance = args[0] - args[1];\n              if (combineTextItems && isSameTextLine && textContentItem.initialized && advance > 0 && advance <= textContentItem.fakeMultiSpaceMax) {\n                textState.translateTextLineMatrix(args[0], args[1]);\n                textContentItem.width += args[0] - textContentItem.lastAdvanceWidth;\n                textContentItem.height += args[1] - textContentItem.lastAdvanceHeight;\n                diff = args[0] - textContentItem.lastAdvanceWidth - (args[1] - textContentItem.lastAdvanceHeight);\n                addFakeSpaces(diff, textContentItem.str);\n                break;\n              }\n              flushTextContentItem();\n              textState.translateTextLineMatrix(args[0], args[1]);\n              textState.textMatrix = textState.textLineMatrix.slice();\n              break;\n            case _util.OPS.setLeadingMoveText:\n              flushTextContentItem();\n              textState.leading = -args[1];\n              textState.translateTextLineMatrix(args[0], args[1]);\n              textState.textMatrix = textState.textLineMatrix.slice();\n              break;\n            case _util.OPS.nextLine:\n              flushTextContentItem();\n              textState.carriageReturn();\n              break;\n            case _util.OPS.setTextMatrix:\n              advance = textState.calcTextLineMatrixAdvance(args[0], args[1], args[2], args[3], args[4], args[5]);\n              if (combineTextItems && advance !== null && textContentItem.initialized && advance.value > 0 && advance.value <= textContentItem.fakeMultiSpaceMax) {\n                textState.translateTextLineMatrix(advance.width, advance.height);\n                textContentItem.width += advance.width - textContentItem.lastAdvanceWidth;\n                textContentItem.height += advance.height - textContentItem.lastAdvanceHeight;\n                diff = advance.width - textContentItem.lastAdvanceWidth - (advance.height - textContentItem.lastAdvanceHeight);\n                addFakeSpaces(diff, textContentItem.str);\n                break;\n              }\n              flushTextContentItem();\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              break;\n            case _util.OPS.setCharSpacing:\n              textState.charSpacing = args[0];\n              break;\n            case _util.OPS.setWordSpacing:\n              textState.wordSpacing = args[0];\n              break;\n            case _util.OPS.beginText:\n              flushTextContentItem();\n              textState.textMatrix = _util.IDENTITY_MATRIX.slice();\n              textState.textLineMatrix = _util.IDENTITY_MATRIX.slice();\n              break;\n            case _util.OPS.showSpacedText:\n              var items = args[0];\n              var offset;\n              for (var j = 0, jj = items.length; j < jj; j++) {\n                if (typeof items[j] === 'string') {\n                  buildTextContentItem(items[j]);\n                } else if ((0, _util.isNum)(items[j])) {\n                  ensureTextContentItem();\n                  advance = items[j] * textState.fontSize / 1000;\n                  var breakTextRun = false;\n                  if (textState.font.vertical) {\n                    offset = advance;\n                    textState.translateTextMatrix(0, offset);\n                    breakTextRun = textContentItem.textRunBreakAllowed && advance > textContentItem.fakeMultiSpaceMax;\n                    if (!breakTextRun) {\n                      textContentItem.height += offset;\n                    }\n                  } else {\n                    advance = -advance;\n                    offset = advance * textState.textHScale;\n                    textState.translateTextMatrix(offset, 0);\n                    breakTextRun = textContentItem.textRunBreakAllowed && advance > textContentItem.fakeMultiSpaceMax;\n                    if (!breakTextRun) {\n                      textContentItem.width += offset;\n                    }\n                  }\n                  if (breakTextRun) {\n                    flushTextContentItem();\n                  } else if (advance > 0) {\n                    addFakeSpaces(advance, textContentItem.str);\n                  }\n                }\n              }\n              break;\n            case _util.OPS.showText:\n              buildTextContentItem(args[0]);\n              break;\n            case _util.OPS.nextLineShowText:\n              flushTextContentItem();\n              textState.carriageReturn();\n              buildTextContentItem(args[0]);\n              break;\n            case _util.OPS.nextLineSetSpacingShowText:\n              flushTextContentItem();\n              textState.wordSpacing = args[0];\n              textState.charSpacing = args[1];\n              textState.carriageReturn();\n              buildTextContentItem(args[2]);\n              break;\n            case _util.OPS.paintXObject:\n              flushTextContentItem();\n              if (!xobjs) {\n                xobjs = resources.get('XObject') || _primitives.Dict.empty;\n              }\n              var name = args[0].name;\n              if (name && skipEmptyXObjs[name] !== undefined) {\n                break;\n              }\n              next(new Promise(function (resolveXObject, rejectXObject) {\n                if (!name) {\n                  throw new _util.FormatError('XObject must be referred to by name.');\n                }\n                var xobj = xobjs.get(name);\n                if (!xobj) {\n                  resolveXObject();\n                  return;\n                }\n                if (!(0, _primitives.isStream)(xobj)) {\n                  throw new _util.FormatError('XObject should be a stream');\n                }\n                var type = xobj.dict.get('Subtype');\n                if (!(0, _primitives.isName)(type)) {\n                  throw new _util.FormatError('XObject should have a Name subtype');\n                }\n                if (type.name !== 'Form') {\n                  skipEmptyXObjs[name] = true;\n                  resolveXObject();\n                  return;\n                }\n                var currentState = stateManager.state.clone();\n                var xObjStateManager = new StateManager(currentState);\n                var matrix = xobj.dict.getArray('Matrix');\n                if (Array.isArray(matrix) && matrix.length === 6) {\n                  xObjStateManager.transform(matrix);\n                }\n                enqueueChunk();\n                var sinkWrapper = {\n                  enqueueInvoked: false,\n                  enqueue: function enqueue(chunk, size) {\n                    this.enqueueInvoked = true;\n                    sink.enqueue(chunk, size);\n                  },\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: task,\n                  resources: xobj.dict.get('Resources') || resources,\n                  stateManager: xObjStateManager,\n                  normalizeWhitespace: normalizeWhitespace,\n                  combineTextItems: combineTextItems,\n                  sink: sinkWrapper,\n                  seenStyles: seenStyles\n                }).then(function () {\n                  if (!sinkWrapper.enqueueInvoked) {\n                    skipEmptyXObjs[name] = true;\n                  }\n                  resolveXObject();\n                }, rejectXObject);\n              }).catch(function (reason) {\n                if (reason instanceof _util.AbortException) {\n                  return;\n                }\n                if (self.options.ignoreErrors) {\n                  (0, _util.warn)('getTextContent - ignoring XObject: \"' + reason + '\".');\n                  return;\n                }\n                throw reason;\n              }));\n              return;\n            case _util.OPS.setGState:\n              flushTextContentItem();\n              var dictName = args[0];\n              var extGState = resources.get('ExtGState');\n              if (!(0, _primitives.isDict)(extGState) || !(0, _primitives.isName)(dictName)) {\n                break;\n              }\n              var gState = extGState.get(dictName.name);\n              if (!(0, _primitives.isDict)(gState)) {\n                break;\n              }\n              var gStateFont = gState.get('Font');\n              if (gStateFont) {\n                textState.fontName = null;\n                textState.fontSize = gStateFont[1];\n                next(handleSetFont(null, gStateFont[0]));\n                return;\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(function (reason) {\n        if (reason instanceof _util.AbortException) {\n          return;\n        }\n        if (_this9.options.ignoreErrors) {\n          (0, _util.warn)('getTextContent - ignoring errors during \"' + task.name + '\" ' + ('task: \"' + reason + '\".'));\n          flushTextContentItem();\n          enqueueChunk();\n          return;\n        }\n        throw reason;\n      });\n    },\n\n    extractDataStructures: function PartialEvaluator_extractDataStructures(dict, baseDict, properties) {\n      var _this10 = this;\n\n      var xref = this.xref;\n      var toUnicode = dict.get('ToUnicode') || baseDict.get('ToUnicode');\n      var toUnicodePromise = toUnicode ? this.readToUnicode(toUnicode) : Promise.resolve(undefined);\n      if (properties.composite) {\n        var cidSystemInfo = dict.get('CIDSystemInfo');\n        if ((0, _primitives.isDict)(cidSystemInfo)) {\n          properties.cidSystemInfo = {\n            registry: (0, _util.stringToPDFString)(cidSystemInfo.get('Registry')),\n            ordering: (0, _util.stringToPDFString)(cidSystemInfo.get('Ordering')),\n            supplement: cidSystemInfo.get('Supplement')\n          };\n        }\n        var cidToGidMap = dict.get('CIDToGIDMap');\n        if ((0, _primitives.isStream)(cidToGidMap)) {\n          properties.cidToGidMap = this.readCidToGidMap(cidToGidMap);\n        }\n      }\n      var differences = [];\n      var baseEncodingName = null;\n      var encoding;\n      if (dict.has('Encoding')) {\n        encoding = dict.get('Encoding');\n        if ((0, _primitives.isDict)(encoding)) {\n          baseEncodingName = encoding.get('BaseEncoding');\n          baseEncodingName = (0, _primitives.isName)(baseEncodingName) ? baseEncodingName.name : null;\n          if (encoding.has('Differences')) {\n            var diffEncoding = encoding.get('Differences');\n            var index = 0;\n            for (var j = 0, jj = diffEncoding.length; j < jj; j++) {\n              var data = xref.fetchIfRef(diffEncoding[j]);\n              if ((0, _util.isNum)(data)) {\n                index = data;\n              } else if ((0, _primitives.isName)(data)) {\n                differences[index++] = data.name;\n              } else {\n                throw new _util.FormatError('Invalid entry in \\'Differences\\' array: ' + data);\n              }\n            }\n          }\n        } else if ((0, _primitives.isName)(encoding)) {\n          baseEncodingName = encoding.name;\n        } else {\n          throw new _util.FormatError('Encoding is not a Name nor a Dict');\n        }\n        if (baseEncodingName !== 'MacRomanEncoding' && baseEncodingName !== 'MacExpertEncoding' && baseEncodingName !== 'WinAnsiEncoding') {\n          baseEncodingName = null;\n        }\n      }\n      if (baseEncodingName) {\n        properties.defaultEncoding = (0, _encodings.getEncoding)(baseEncodingName).slice();\n      } else {\n        var isSymbolicFont = !!(properties.flags & _fonts.FontFlags.Symbolic);\n        var isNonsymbolicFont = !!(properties.flags & _fonts.FontFlags.Nonsymbolic);\n        encoding = _encodings.StandardEncoding;\n        if (properties.type === 'TrueType' && !isNonsymbolicFont) {\n          encoding = _encodings.WinAnsiEncoding;\n        }\n        if (isSymbolicFont) {\n          encoding = _encodings.MacRomanEncoding;\n          if (!properties.file) {\n            if (/Symbol/i.test(properties.name)) {\n              encoding = _encodings.SymbolSetEncoding;\n            } else if (/Dingbats/i.test(properties.name)) {\n              encoding = _encodings.ZapfDingbatsEncoding;\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      return toUnicodePromise.then(function (toUnicode) {\n        properties.toUnicode = toUnicode;\n        return _this10.buildToUnicode(properties);\n      }).then(function (toUnicode) {\n        properties.toUnicode = toUnicode;\n        return properties;\n      });\n    },\n    _buildSimpleFontToUnicode: function _buildSimpleFontToUnicode(properties) {\n      (0, _util.assert)(!properties.composite, 'Must be a simple font.');\n      var toUnicode = [],\n          charcode = void 0,\n          glyphName = void 0;\n      var encoding = properties.defaultEncoding.slice();\n      var baseEncodingName = properties.baseEncodingName;\n      var differences = properties.differences;\n      for (charcode in differences) {\n        glyphName = differences[charcode];\n        if (glyphName === '.notdef') {\n          continue;\n        }\n        encoding[charcode] = glyphName;\n      }\n      var glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();\n      for (charcode in encoding) {\n        glyphName = encoding[charcode];\n        if (glyphName === '') {\n          continue;\n        } else if (glyphsUnicodeMap[glyphName] === undefined) {\n          var code = 0;\n          switch (glyphName[0]) {\n            case 'G':\n              if (glyphName.length === 3) {\n                code = parseInt(glyphName.substr(1), 16);\n              }\n              break;\n            case 'g':\n              if (glyphName.length === 5) {\n                code = parseInt(glyphName.substr(1), 16);\n              }\n              break;\n            case 'C':\n            case 'c':\n              if (glyphName.length >= 3) {\n                code = +glyphName.substr(1);\n              }\n              break;\n            default:\n              var unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap);\n              if (unicode !== -1) {\n                code = unicode;\n              }\n          }\n          if (code) {\n            if (baseEncodingName && code === +charcode) {\n              var baseEncoding = (0, _encodings.getEncoding)(baseEncodingName);\n              if (baseEncoding && (glyphName = baseEncoding[charcode])) {\n                toUnicode[charcode] = String.fromCharCode(glyphsUnicodeMap[glyphName]);\n                continue;\n              }\n            }\n            toUnicode[charcode] = String.fromCharCode(code);\n          }\n          continue;\n        }\n        toUnicode[charcode] = String.fromCharCode(glyphsUnicodeMap[glyphName]);\n      }\n      return new _fonts.ToUnicodeMap(toUnicode);\n    },\n    buildToUnicode: function buildToUnicode(properties) {\n      properties.hasIncludedToUnicodeMap = !!properties.toUnicode && properties.toUnicode.length > 0;\n      if (properties.hasIncludedToUnicodeMap) {\n        if (!properties.composite && properties.hasEncoding) {\n          properties.fallbackToUnicode = this._buildSimpleFontToUnicode(properties);\n        }\n        return Promise.resolve(properties.toUnicode);\n      }\n      if (!properties.composite) {\n        return Promise.resolve(this._buildSimpleFontToUnicode(properties));\n      }\n      if (properties.composite && (properties.cMap.builtInCMap && !(properties.cMap instanceof _cmap.IdentityCMap) || properties.cidSystemInfo.registry === 'Adobe' && (properties.cidSystemInfo.ordering === 'GB1' || properties.cidSystemInfo.ordering === 'CNS1' || properties.cidSystemInfo.ordering === 'Japan1' || properties.cidSystemInfo.ordering === 'Korea1'))) {\n        var registry = properties.cidSystemInfo.registry;\n        var ordering = properties.cidSystemInfo.ordering;\n        var ucs2CMapName = _primitives.Name.get(registry + '-' + ordering + '-UCS2');\n        return _cmap.CMapFactory.create({\n          encoding: ucs2CMapName,\n          fetchBuiltInCMap: this.fetchBuiltInCMap,\n          useCMap: null\n        }).then(function (ucs2CMap) {\n          var cMap = properties.cMap;\n          var toUnicode = [];\n          cMap.forEach(function (charcode, cid) {\n            if (cid > 0xffff) {\n              throw new _util.FormatError('Max size of CID is 65,535');\n            }\n            var ucs2 = ucs2CMap.lookup(cid);\n            if (ucs2) {\n              toUnicode[charcode] = String.fromCharCode((ucs2.charCodeAt(0) << 8) + ucs2.charCodeAt(1));\n            }\n          });\n          return new _fonts.ToUnicodeMap(toUnicode);\n        });\n      }\n      return Promise.resolve(new _fonts.IdentityToUnicodeMap(properties.firstChar, properties.lastChar));\n    },\n\n    readToUnicode: function PartialEvaluator_readToUnicode(toUnicode) {\n      var cmapObj = toUnicode;\n      if ((0, _primitives.isName)(cmapObj)) {\n        return _cmap.CMapFactory.create({\n          encoding: cmapObj,\n          fetchBuiltInCMap: this.fetchBuiltInCMap,\n          useCMap: null\n        }).then(function (cmap) {\n          if (cmap instanceof _cmap.IdentityCMap) {\n            return new _fonts.IdentityToUnicodeMap(0, 0xFFFF);\n          }\n          return new _fonts.ToUnicodeMap(cmap.getMap());\n        });\n      } else if ((0, _primitives.isStream)(cmapObj)) {\n        return _cmap.CMapFactory.create({\n          encoding: cmapObj,\n          fetchBuiltInCMap: this.fetchBuiltInCMap,\n          useCMap: null\n        }).then(function (cmap) {\n          if (cmap instanceof _cmap.IdentityCMap) {\n            return new _fonts.IdentityToUnicodeMap(0, 0xFFFF);\n          }\n          var map = new Array(cmap.length);\n          cmap.forEach(function (charCode, token) {\n            var str = [];\n            for (var k = 0; k < token.length; k += 2) {\n              var 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              var w2 = token.charCodeAt(k) << 8 | token.charCodeAt(k + 1);\n              str.push(((w1 & 0x3ff) << 10) + (w2 & 0x3ff) + 0x10000);\n            }\n            map[charCode] = String.fromCharCode.apply(String, str);\n          });\n          return new _fonts.ToUnicodeMap(map);\n        });\n      }\n      return Promise.resolve(null);\n    },\n    readCidToGidMap: function PartialEvaluator_readCidToGidMap(cidToGidStream) {\n      var glyphsData = cidToGidStream.getBytes();\n      var result = [];\n      for (var j = 0, jj = glyphsData.length; j < jj; j++) {\n        var glyphID = glyphsData[j++] << 8 | glyphsData[j];\n        if (glyphID === 0) {\n          continue;\n        }\n        var code = j >> 1;\n        result[code] = glyphID;\n      }\n      return result;\n    },\n    extractWidths: function PartialEvaluator_extractWidths(dict, descriptor, properties) {\n      var xref = this.xref;\n      var glyphsWidths = [];\n      var defaultWidth = 0;\n      var glyphsVMetrics = [];\n      var defaultVMetrics;\n      var i, ii, j, jj, start, code, widths;\n      if (properties.composite) {\n        defaultWidth = dict.has('DW') ? dict.get('DW') : 1000;\n        widths = dict.get('W');\n        if (widths) {\n          for (i = 0, ii = widths.length; i < ii; i++) {\n            start = xref.fetchIfRef(widths[i++]);\n            code = xref.fetchIfRef(widths[i]);\n            if (Array.isArray(code)) {\n              for (j = 0, jj = code.length; j < jj; j++) {\n                glyphsWidths[start++] = xref.fetchIfRef(code[j]);\n              }\n            } else {\n              var width = xref.fetchIfRef(widths[++i]);\n              for (j = start; j <= code; j++) {\n                glyphsWidths[j] = width;\n              }\n            }\n          }\n        }\n        if (properties.vertical) {\n          var vmetrics = dict.getArray('DW2') || [880, -1000];\n          defaultVMetrics = [vmetrics[1], defaultWidth * 0.5, vmetrics[0]];\n          vmetrics = dict.get('W2');\n          if (vmetrics) {\n            for (i = 0, ii = vmetrics.length; i < ii; i++) {\n              start = xref.fetchIfRef(vmetrics[i++]);\n              code = xref.fetchIfRef(vmetrics[i]);\n              if (Array.isArray(code)) {\n                for (j = 0, jj = code.length; j < jj; j++) {\n                  glyphsVMetrics[start++] = [xref.fetchIfRef(code[j++]), xref.fetchIfRef(code[j++]), xref.fetchIfRef(code[j])];\n                }\n              } else {\n                var vmetric = [xref.fetchIfRef(vmetrics[++i]), xref.fetchIfRef(vmetrics[++i]), xref.fetchIfRef(vmetrics[++i])];\n                for (j = start; j <= code; j++) {\n                  glyphsVMetrics[j] = vmetric;\n                }\n              }\n            }\n          }\n        }\n      } else {\n        var firstChar = properties.firstChar;\n        widths = dict.get('Widths');\n        if (widths) {\n          j = firstChar;\n          for (i = 0, ii = widths.length; i < ii; i++) {\n            glyphsWidths[j++] = xref.fetchIfRef(widths[i]);\n          }\n          defaultWidth = parseFloat(descriptor.get('MissingWidth')) || 0;\n        } else {\n          var baseFontName = dict.get('BaseFont');\n          if ((0, _primitives.isName)(baseFontName)) {\n            var metrics = this.getBaseFontMetrics(baseFontName.name);\n            glyphsWidths = this.buildCharCodeToWidth(metrics.widths, properties);\n            defaultWidth = metrics.defaultWidth;\n          }\n        }\n      }\n      var isMonospace = true;\n      var firstWidth = defaultWidth;\n      for (var glyph in glyphsWidths) {\n        var 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 |= _fonts.FontFlags.FixedPitch;\n      }\n      properties.defaultWidth = defaultWidth;\n      properties.widths = glyphsWidths;\n      properties.defaultVMetrics = defaultVMetrics;\n      properties.vmetrics = glyphsVMetrics;\n    },\n    isSerifFont: function PartialEvaluator_isSerifFont(baseFontName) {\n      var fontNameWoStyle = baseFontName.split('-')[0];\n      return fontNameWoStyle in (0, _standard_fonts.getSerifFonts)() || fontNameWoStyle.search(/serif/gi) !== -1;\n    },\n    getBaseFontMetrics: function PartialEvaluator_getBaseFontMetrics(name) {\n      var defaultWidth = 0;\n      var widths = [];\n      var monospace = false;\n      var stdFontMap = (0, _standard_fonts.getStdFontMap)();\n      var lookupName = stdFontMap[name] || name;\n      var Metrics = (0, _metrics.getMetrics)();\n      if (!(lookupName in Metrics)) {\n        if (this.isSerifFont(name)) {\n          lookupName = 'Times-Roman';\n        } else {\n          lookupName = 'Helvetica';\n        }\n      }\n      var glyphWidths = Metrics[lookupName];\n      if ((0, _util.isNum)(glyphWidths)) {\n        defaultWidth = glyphWidths;\n        monospace = true;\n      } else {\n        widths = glyphWidths();\n      }\n      return {\n        defaultWidth: defaultWidth,\n        monospace: monospace,\n        widths: widths\n      };\n    },\n    buildCharCodeToWidth: function PartialEvaluator_bulildCharCodeToWidth(widthsByGlyphName, properties) {\n      var widths = Object.create(null);\n      var differences = properties.differences;\n      var encoding = properties.defaultEncoding;\n      for (var 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: function PartialEvaluator_preEvaluateFont(dict) {\n      var baseDict = dict;\n      var type = dict.get('Subtype');\n      if (!(0, _primitives.isName)(type)) {\n        throw new _util.FormatError('invalid font Subtype');\n      }\n      var composite = false;\n      var uint8array;\n      if (type.name === 'Type0') {\n        var df = dict.get('DescendantFonts');\n        if (!df) {\n          throw new _util.FormatError('Descendant fonts are not specified');\n        }\n        dict = Array.isArray(df) ? this.xref.fetchIfRef(df[0]) : df;\n        type = dict.get('Subtype');\n        if (!(0, _primitives.isName)(type)) {\n          throw new _util.FormatError('invalid font Subtype');\n        }\n        composite = true;\n      }\n      var descriptor = dict.get('FontDescriptor');\n      if (descriptor) {\n        var hash = new _murmurhash.MurmurHash3_64();\n        var encoding = baseDict.getRaw('Encoding');\n        if ((0, _primitives.isName)(encoding)) {\n          hash.update(encoding.name);\n        } else if ((0, _primitives.isRef)(encoding)) {\n          hash.update(encoding.toString());\n        } else if ((0, _primitives.isDict)(encoding)) {\n          var keys = encoding.getKeys();\n          for (var i = 0, ii = keys.length; i < ii; i++) {\n            var entry = encoding.getRaw(keys[i]);\n            if ((0, _primitives.isName)(entry)) {\n              hash.update(entry.name);\n            } else if ((0, _primitives.isRef)(entry)) {\n              hash.update(entry.toString());\n            } else if (Array.isArray(entry)) {\n              var diffLength = entry.length,\n                  diffBuf = new Array(diffLength);\n              for (var j = 0; j < diffLength; j++) {\n                var diffEntry = entry[j];\n                if ((0, _primitives.isName)(diffEntry)) {\n                  diffBuf[j] = diffEntry.name;\n                } else if ((0, _util.isNum)(diffEntry) || (0, _primitives.isRef)(diffEntry)) {\n                  diffBuf[j] = diffEntry.toString();\n                }\n              }\n              hash.update(diffBuf.join());\n            }\n          }\n        }\n        var toUnicode = dict.get('ToUnicode') || baseDict.get('ToUnicode');\n        if ((0, _primitives.isStream)(toUnicode)) {\n          var stream = toUnicode.str || toUnicode;\n          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 ((0, _primitives.isName)(toUnicode)) {\n          hash.update(toUnicode.name);\n        }\n        var widths = dict.get('Widths') || baseDict.get('Widths');\n        if (widths) {\n          uint8array = new Uint8Array(new Uint32Array(widths).buffer);\n          hash.update(uint8array);\n        }\n      }\n      return {\n        descriptor: descriptor,\n        dict: dict,\n        baseDict: baseDict,\n        composite: composite,\n        type: type.name,\n        hash: hash ? hash.hexdigest() : ''\n      };\n    },\n    translateFont: function PartialEvaluator_translateFont(preEvaluatedFont) {\n      var _this11 = this;\n\n      var baseDict = preEvaluatedFont.baseDict;\n      var dict = preEvaluatedFont.dict;\n      var composite = preEvaluatedFont.composite;\n      var descriptor = preEvaluatedFont.descriptor;\n      var type = preEvaluatedFont.type;\n      var maxCharIndex = composite ? 0xFFFF : 0xFF;\n      var properties;\n      if (!descriptor) {\n        if (type === 'Type3') {\n          descriptor = new _primitives.Dict(null);\n          descriptor.set('FontName', _primitives.Name.get(type));\n          descriptor.set('FontBBox', dict.getArray('FontBBox'));\n        } else {\n          var baseFontName = dict.get('BaseFont');\n          if (!(0, _primitives.isName)(baseFontName)) {\n            throw new _util.FormatError('Base font is not specified');\n          }\n          baseFontName = baseFontName.name.replace(/[,_]/g, '-');\n          var metrics = this.getBaseFontMetrics(baseFontName);\n          var fontNameWoStyle = baseFontName.split('-')[0];\n          var flags = (this.isSerifFont(fontNameWoStyle) ? _fonts.FontFlags.Serif : 0) | (metrics.monospace ? _fonts.FontFlags.FixedPitch : 0) | ((0, _standard_fonts.getSymbolsFonts)()[fontNameWoStyle] ? _fonts.FontFlags.Symbolic : _fonts.FontFlags.Nonsymbolic);\n          properties = {\n            type: type,\n            name: baseFontName,\n            widths: metrics.widths,\n            defaultWidth: metrics.defaultWidth,\n            flags: flags,\n            firstChar: 0,\n            lastChar: maxCharIndex\n          };\n          return this.extractDataStructures(dict, dict, properties).then(function (properties) {\n            properties.widths = _this11.buildCharCodeToWidth(metrics.widths, properties);\n            return new _fonts.Font(baseFontName, null, properties);\n          });\n        }\n      }\n      var firstChar = dict.get('FirstChar') || 0;\n      var lastChar = dict.get('LastChar') || maxCharIndex;\n      var fontName = descriptor.get('FontName');\n      var baseFont = dict.get('BaseFont');\n      if ((0, _util.isString)(fontName)) {\n        fontName = _primitives.Name.get(fontName);\n      }\n      if ((0, _util.isString)(baseFont)) {\n        baseFont = _primitives.Name.get(baseFont);\n      }\n      if (type !== 'Type3') {\n        var fontNameStr = fontName && fontName.name;\n        var baseFontStr = baseFont && baseFont.name;\n        if (fontNameStr !== baseFontStr) {\n          (0, _util.info)('The FontDescriptor\\'s FontName is \"' + fontNameStr + '\" but should be the same as the Font\\'s BaseFont \"' + baseFontStr + '\"');\n          if (fontNameStr && baseFontStr && baseFontStr.indexOf(fontNameStr) === 0) {\n            fontName = baseFont;\n          }\n        }\n      }\n      fontName = fontName || baseFont;\n      if (!(0, _primitives.isName)(fontName)) {\n        throw new _util.FormatError('invalid font name');\n      }\n      var fontFile = descriptor.get('FontFile', 'FontFile2', 'FontFile3');\n      if (fontFile) {\n        if (fontFile.dict) {\n          var subtype = fontFile.dict.get('Subtype');\n          if (subtype) {\n            subtype = subtype.name;\n          }\n          var length1 = fontFile.dict.get('Length1');\n          var length2 = fontFile.dict.get('Length2');\n          var length3 = fontFile.dict.get('Length3');\n        }\n      }\n      properties = {\n        type: type,\n        name: fontName.name,\n        subtype: subtype,\n        file: fontFile,\n        length1: length1,\n        length2: length2,\n        length3: length3,\n        loadedName: baseDict.loadedName,\n        composite: composite,\n        wideChars: composite,\n        fixedPitch: false,\n        fontMatrix: dict.getArray('FontMatrix') || _util.FONT_IDENTITY_MATRIX,\n        firstChar: firstChar || 0,\n        lastChar: lastChar || maxCharIndex,\n        bbox: descriptor.getArray('FontBBox'),\n        ascent: descriptor.get('Ascent'),\n        descent: descriptor.get('Descent'),\n        xHeight: descriptor.get('XHeight'),\n        capHeight: descriptor.get('CapHeight'),\n        flags: descriptor.get('Flags'),\n        italicAngle: descriptor.get('ItalicAngle'),\n        isType3Font: false\n      };\n      var cMapPromise;\n      if (composite) {\n        var cidEncoding = baseDict.get('Encoding');\n        if ((0, _primitives.isName)(cidEncoding)) {\n          properties.cidEncoding = cidEncoding.name;\n        }\n        cMapPromise = _cmap.CMapFactory.create({\n          encoding: cidEncoding,\n          fetchBuiltInCMap: this.fetchBuiltInCMap,\n          useCMap: null\n        }).then(function (cMap) {\n          properties.cMap = cMap;\n          properties.vertical = properties.cMap.vertical;\n        });\n      } else {\n        cMapPromise = Promise.resolve(undefined);\n      }\n      return cMapPromise.then(function () {\n        return _this11.extractDataStructures(dict, baseDict, properties);\n      }).then(function (properties) {\n        _this11.extractWidths(dict, descriptor, properties);\n        if (type === 'Type3') {\n          properties.isType3Font = true;\n        }\n        return new _fonts.Font(fontName.name, fontFile, properties);\n      });\n    }\n  };\n  return PartialEvaluator;\n}();\nvar TranslatedFont = function TranslatedFontClosure() {\n  function TranslatedFont(loadedName, font, dict) {\n    this.loadedName = loadedName;\n    this.font = font;\n    this.dict = dict;\n    this.type3Loaded = null;\n    this.sent = false;\n  }\n  TranslatedFont.prototype = {\n    send: function send(handler) {\n      if (this.sent) {\n        return;\n      }\n      var fontData = this.font.exportData();\n      handler.send('commonobj', [this.loadedName, 'Font', fontData]);\n      this.sent = true;\n    },\n    loadType3Data: function loadType3Data(evaluator, resources, parentOperatorList, task) {\n      if (!this.font.isType3Font) {\n        throw new Error('Must be a Type3 font.');\n      }\n      if (this.type3Loaded) {\n        return this.type3Loaded;\n      }\n      var type3Options = Object.create(evaluator.options);\n      type3Options.ignoreErrors = false;\n      var type3Evaluator = evaluator.clone(type3Options);\n      var translatedFont = this.font;\n      var loadCharProcsPromise = Promise.resolve();\n      var charProcs = this.dict.get('CharProcs');\n      var fontResources = this.dict.get('Resources') || resources;\n      var charProcKeys = charProcs.getKeys();\n      var charProcOperatorList = Object.create(null);\n\n      var _loop2 = function _loop2() {\n        var key = charProcKeys[i];\n        loadCharProcsPromise = loadCharProcsPromise.then(function () {\n          var glyphStream = charProcs.get(key);\n          var operatorList = new _operator_list.OperatorList();\n          return type3Evaluator.getOperatorList({\n            stream: glyphStream,\n            task: task,\n            resources: fontResources,\n            operatorList: operatorList\n          }).then(function () {\n            charProcOperatorList[key] = operatorList.getIR();\n            parentOperatorList.addDependencies(operatorList.dependencies);\n          }).catch(function (reason) {\n            (0, _util.warn)('Type3 font resource \"' + key + '\" is not available.');\n            var operatorList = new _operator_list.OperatorList();\n            charProcOperatorList[key] = operatorList.getIR();\n          });\n        });\n      };\n\n      for (var i = 0, n = charProcKeys.length; i < n; ++i) {\n        _loop2();\n      }\n      this.type3Loaded = loadCharProcsPromise.then(function () {\n        translatedFont.charProcOperatorList = charProcOperatorList;\n      });\n      return this.type3Loaded;\n    }\n  };\n  return TranslatedFont;\n}();\nvar StateManager = function StateManagerClosure() {\n  function StateManager(initialState) {\n    this.state = initialState;\n    this.stateStack = [];\n  }\n  StateManager.prototype = {\n    save: function save() {\n      var old = this.state;\n      this.stateStack.push(this.state);\n      this.state = old.clone();\n    },\n    restore: function restore() {\n      var prev = this.stateStack.pop();\n      if (prev) {\n        this.state = prev;\n      }\n    },\n    transform: function transform(args) {\n      this.state.ctm = _util.Util.transform(this.state.ctm, args);\n    }\n  };\n  return StateManager;\n}();\nvar TextState = function TextStateClosure() {\n  function TextState() {\n    this.ctm = new Float32Array(_util.IDENTITY_MATRIX);\n    this.fontName = null;\n    this.fontSize = 0;\n    this.font = null;\n    this.fontMatrix = _util.FONT_IDENTITY_MATRIX;\n    this.textMatrix = _util.IDENTITY_MATRIX.slice();\n    this.textLineMatrix = _util.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  TextState.prototype = {\n    setTextMatrix: function TextState_setTextMatrix(a, b, c, d, e, f) {\n      var 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: function TextState_setTextMatrix(a, b, c, d, e, f) {\n      var 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: function TextState_translateTextMatrix(x, y) {\n      var 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: function TextState_translateTextMatrix(x, y) {\n      var 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    calcTextLineMatrixAdvance: function TextState_calcTextLineMatrixAdvance(a, b, c, d, e, f) {\n      var font = this.font;\n      if (!font) {\n        return null;\n      }\n      var m = this.textLineMatrix;\n      if (!(a === m[0] && b === m[1] && c === m[2] && d === m[3])) {\n        return null;\n      }\n      var txDiff = e - m[4],\n          tyDiff = f - m[5];\n      if (font.vertical && txDiff !== 0 || !font.vertical && tyDiff !== 0) {\n        return null;\n      }\n      var tx,\n          ty,\n          denominator = a * d - b * c;\n      if (font.vertical) {\n        tx = -tyDiff * c / denominator;\n        ty = tyDiff * a / denominator;\n      } else {\n        tx = txDiff * d / denominator;\n        ty = -txDiff * b / denominator;\n      }\n      return {\n        width: tx,\n        height: ty,\n        value: font.vertical ? ty : tx\n      };\n    },\n    calcRenderMatrix: function TextState_calcRendeMatrix(ctm) {\n      var tsm = [this.fontSize * this.textHScale, 0, 0, this.fontSize, 0, this.textRise];\n      return _util.Util.transform(ctm, _util.Util.transform(this.textMatrix, tsm));\n    },\n    carriageReturn: function TextState_carriageReturn() {\n      this.translateTextLineMatrix(0, -this.leading);\n      this.textMatrix = this.textLineMatrix.slice();\n    },\n    clone: function TextState_clone() {\n      var 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  };\n  return TextState;\n}();\nvar EvalState = function EvalStateClosure() {\n  function EvalState() {\n    this.ctm = new Float32Array(_util.IDENTITY_MATRIX);\n    this.font = null;\n    this.textRenderingMode = _util.TextRenderingMode.FILL;\n    this.fillColorSpace = _colorspace.ColorSpace.singletons.gray;\n    this.strokeColorSpace = _colorspace.ColorSpace.singletons.gray;\n  }\n  EvalState.prototype = {\n    clone: function CanvasExtraState_clone() {\n      return Object.create(this);\n    }\n  };\n  return EvalState;\n}();\nvar EvaluatorPreprocessor = function EvaluatorPreprocessorClosure() {\n  var getOPMap = (0, _util.getLookupTableFactory)(function (t) {\n    t['w'] = {\n      id: _util.OPS.setLineWidth,\n      numArgs: 1,\n      variableArgs: false\n    };\n    t['J'] = {\n      id: _util.OPS.setLineCap,\n      numArgs: 1,\n      variableArgs: false\n    };\n    t['j'] = {\n      id: _util.OPS.setLineJoin,\n      numArgs: 1,\n      variableArgs: false\n    };\n    t['M'] = {\n      id: _util.OPS.setMiterLimit,\n      numArgs: 1,\n      variableArgs: false\n    };\n    t['d'] = {\n      id: _util.OPS.setDash,\n      numArgs: 2,\n      variableArgs: false\n    };\n    t['ri'] = {\n      id: _util.OPS.setRenderingIntent,\n      numArgs: 1,\n      variableArgs: false\n    };\n    t['i'] = {\n      id: _util.OPS.setFlatness,\n      numArgs: 1,\n      variableArgs: false\n    };\n    t['gs'] = {\n      id: _util.OPS.setGState,\n      numArgs: 1,\n      variableArgs: false\n    };\n    t['q'] = {\n      id: _util.OPS.save,\n      numArgs: 0,\n      variableArgs: false\n    };\n    t['Q'] = {\n      id: _util.OPS.restore,\n      numArgs: 0,\n      variableArgs: false\n    };\n    t['cm'] = {\n      id: _util.OPS.transform,\n      numArgs: 6,\n      variableArgs: false\n    };\n    t['m'] = {\n      id: _util.OPS.moveTo,\n      numArgs: 2,\n      variableArgs: false\n    };\n    t['l'] = {\n      id: _util.OPS.lineTo,\n      numArgs: 2,\n      variableArgs: false\n    };\n    t['c'] = {\n      id: _util.OPS.curveTo,\n      numArgs: 6,\n      variableArgs: false\n    };\n    t['v'] = {\n      id: _util.OPS.curveTo2,\n      numArgs: 4,\n      variableArgs: false\n    };\n    t['y'] = {\n      id: _util.OPS.curveTo3,\n      numArgs: 4,\n      variableArgs: false\n    };\n    t['h'] = {\n      id: _util.OPS.closePath,\n      numArgs: 0,\n      variableArgs: false\n    };\n    t['re'] = {\n      id: _util.OPS.rectangle,\n      numArgs: 4,\n      variableArgs: false\n    };\n    t['S'] = {\n      id: _util.OPS.stroke,\n      numArgs: 0,\n      variableArgs: false\n    };\n    t['s'] = {\n      id: _util.OPS.closeStroke,\n      numArgs: 0,\n      variableArgs: false\n    };\n    t['f'] = {\n      id: _util.OPS.fill,\n      numArgs: 0,\n      variableArgs: false\n    };\n    t['F'] = {\n      id: _util.OPS.fill,\n      numArgs: 0,\n      variableArgs: false\n    };\n    t['f*'] = {\n      id: _util.OPS.eoFill,\n      numArgs: 0,\n      variableArgs: false\n    };\n    t['B'] = {\n      id: _util.OPS.fillStroke,\n      numArgs: 0,\n      variableArgs: false\n    };\n    t['B*'] = {\n      id: _util.OPS.eoFillStroke,\n      numArgs: 0,\n      variableArgs: false\n    };\n    t['b'] = {\n      id: _util.OPS.closeFillStroke,\n      numArgs: 0,\n      variableArgs: false\n    };\n    t['b*'] = {\n      id: _util.OPS.closeEOFillStroke,\n      numArgs: 0,\n      variableArgs: false\n    };\n    t['n'] = {\n      id: _util.OPS.endPath,\n      numArgs: 0,\n      variableArgs: false\n    };\n    t['W'] = {\n      id: _util.OPS.clip,\n      numArgs: 0,\n      variableArgs: false\n    };\n    t['W*'] = {\n      id: _util.OPS.eoClip,\n      numArgs: 0,\n      variableArgs: false\n    };\n    t['BT'] = {\n      id: _util.OPS.beginText,\n      numArgs: 0,\n      variableArgs: false\n    };\n    t['ET'] = {\n      id: _util.OPS.endText,\n      numArgs: 0,\n      variableArgs: false\n    };\n    t['Tc'] = {\n      id: _util.OPS.setCharSpacing,\n      numArgs: 1,\n      variableArgs: false\n    };\n    t['Tw'] = {\n      id: _util.OPS.setWordSpacing,\n      numArgs: 1,\n      variableArgs: false\n    };\n    t['Tz'] = {\n      id: _util.OPS.setHScale,\n      numArgs: 1,\n      variableArgs: false\n    };\n    t['TL'] = {\n      id: _util.OPS.setLeading,\n      numArgs: 1,\n      variableArgs: false\n    };\n    t['Tf'] = {\n      id: _util.OPS.setFont,\n      numArgs: 2,\n      variableArgs: false\n    };\n    t['Tr'] = {\n      id: _util.OPS.setTextRenderingMode,\n      numArgs: 1,\n      variableArgs: false\n    };\n    t['Ts'] = {\n      id: _util.OPS.setTextRise,\n      numArgs: 1,\n      variableArgs: false\n    };\n    t['Td'] = {\n      id: _util.OPS.moveText,\n      numArgs: 2,\n      variableArgs: false\n    };\n    t['TD'] = {\n      id: _util.OPS.setLeadingMoveText,\n      numArgs: 2,\n      variableArgs: false\n    };\n    t['Tm'] = {\n      id: _util.OPS.setTextMatrix,\n      numArgs: 6,\n      variableArgs: false\n    };\n    t['T*'] = {\n      id: _util.OPS.nextLine,\n      numArgs: 0,\n      variableArgs: false\n    };\n    t['Tj'] = {\n      id: _util.OPS.showText,\n      numArgs: 1,\n      variableArgs: false\n    };\n    t['TJ'] = {\n      id: _util.OPS.showSpacedText,\n      numArgs: 1,\n      variableArgs: false\n    };\n    t['\\''] = {\n      id: _util.OPS.nextLineShowText,\n      numArgs: 1,\n      variableArgs: false\n    };\n    t['\"'] = {\n      id: _util.OPS.nextLineSetSpacingShowText,\n      numArgs: 3,\n      variableArgs: false\n    };\n    t['d0'] = {\n      id: _util.OPS.setCharWidth,\n      numArgs: 2,\n      variableArgs: false\n    };\n    t['d1'] = {\n      id: _util.OPS.setCharWidthAndBounds,\n      numArgs: 6,\n      variableArgs: false\n    };\n    t['CS'] = {\n      id: _util.OPS.setStrokeColorSpace,\n      numArgs: 1,\n      variableArgs: false\n    };\n    t['cs'] = {\n      id: _util.OPS.setFillColorSpace,\n      numArgs: 1,\n      variableArgs: false\n    };\n    t['SC'] = {\n      id: _util.OPS.setStrokeColor,\n      numArgs: 4,\n      variableArgs: true\n    };\n    t['SCN'] = {\n      id: _util.OPS.setStrokeColorN,\n      numArgs: 33,\n      variableArgs: true\n    };\n    t['sc'] = {\n      id: _util.OPS.setFillColor,\n      numArgs: 4,\n      variableArgs: true\n    };\n    t['scn'] = {\n      id: _util.OPS.setFillColorN,\n      numArgs: 33,\n      variableArgs: true\n    };\n    t['G'] = {\n      id: _util.OPS.setStrokeGray,\n      numArgs: 1,\n      variableArgs: false\n    };\n    t['g'] = {\n      id: _util.OPS.setFillGray,\n      numArgs: 1,\n      variableArgs: false\n    };\n    t['RG'] = {\n      id: _util.OPS.setStrokeRGBColor,\n      numArgs: 3,\n      variableArgs: false\n    };\n    t['rg'] = {\n      id: _util.OPS.setFillRGBColor,\n      numArgs: 3,\n      variableArgs: false\n    };\n    t['K'] = {\n      id: _util.OPS.setStrokeCMYKColor,\n      numArgs: 4,\n      variableArgs: false\n    };\n    t['k'] = {\n      id: _util.OPS.setFillCMYKColor,\n      numArgs: 4,\n      variableArgs: false\n    };\n    t['sh'] = {\n      id: _util.OPS.shadingFill,\n      numArgs: 1,\n      variableArgs: false\n    };\n    t['BI'] = {\n      id: _util.OPS.beginInlineImage,\n      numArgs: 0,\n      variableArgs: false\n    };\n    t['ID'] = {\n      id: _util.OPS.beginImageData,\n      numArgs: 0,\n      variableArgs: false\n    };\n    t['EI'] = {\n      id: _util.OPS.endInlineImage,\n      numArgs: 1,\n      variableArgs: false\n    };\n    t['Do'] = {\n      id: _util.OPS.paintXObject,\n      numArgs: 1,\n      variableArgs: false\n    };\n    t['MP'] = {\n      id: _util.OPS.markPoint,\n      numArgs: 1,\n      variableArgs: false\n    };\n    t['DP'] = {\n      id: _util.OPS.markPointProps,\n      numArgs: 2,\n      variableArgs: false\n    };\n    t['BMC'] = {\n      id: _util.OPS.beginMarkedContent,\n      numArgs: 1,\n      variableArgs: false\n    };\n    t['BDC'] = {\n      id: _util.OPS.beginMarkedContentProps,\n      numArgs: 2,\n      variableArgs: false\n    };\n    t['EMC'] = {\n      id: _util.OPS.endMarkedContent,\n      numArgs: 0,\n      variableArgs: false\n    };\n    t['BX'] = {\n      id: _util.OPS.beginCompat,\n      numArgs: 0,\n      variableArgs: false\n    };\n    t['EX'] = {\n      id: _util.OPS.endCompat,\n      numArgs: 0,\n      variableArgs: false\n    };\n    t['BM'] = null;\n    t['BD'] = null;\n    t['true'] = null;\n    t['fa'] = null;\n    t['fal'] = null;\n    t['fals'] = null;\n    t['false'] = null;\n    t['nu'] = null;\n    t['nul'] = null;\n    t['null'] = null;\n  });\n  var MAX_INVALID_PATH_OPS = 20;\n  function EvaluatorPreprocessor(stream, xref, stateManager) {\n    this.opMap = getOPMap();\n    this.parser = new _parser.Parser(new _parser.Lexer(stream, this.opMap), false, xref);\n    this.stateManager = stateManager;\n    this.nonProcessedArgs = [];\n    this._numInvalidPathOPS = 0;\n  }\n  EvaluatorPreprocessor.prototype = {\n    get savedStatesDepth() {\n      return this.stateManager.stateStack.length;\n    },\n    read: function EvaluatorPreprocessor_read(operation) {\n      var args = operation.args;\n      while (true) {\n        var obj = this.parser.getObj();\n        if ((0, _primitives.isCmd)(obj)) {\n          var cmd = obj.cmd;\n          var opSpec = this.opMap[cmd];\n          if (!opSpec) {\n            (0, _util.warn)('Unknown command \"' + cmd + '\".');\n            continue;\n          }\n          var fn = opSpec.id;\n          var numArgs = opSpec.numArgs;\n          var argsLength = args !== null ? args.length : 0;\n          if (!opSpec.variableArgs) {\n            if (argsLength !== numArgs) {\n              var 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              var partialMsg = 'command ' + cmd + ': expected ' + numArgs + ' args, ' + ('but received ' + argsLength + ' args.');\n              if (fn >= _util.OPS.moveTo && fn <= _util.OPS.endPath && ++this._numInvalidPathOPS > MAX_INVALID_PATH_OPS) {\n                throw new _util.FormatError('Invalid ' + partialMsg);\n              }\n              (0, _util.warn)('Skipping ' + partialMsg);\n              if (args !== null) {\n                args.length = 0;\n              }\n              continue;\n            }\n          } else if (argsLength > numArgs) {\n            (0, _util.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 ((0, _primitives.isEOF)(obj)) {\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 _util.FormatError('Too many arguments');\n          }\n        }\n      }\n    },\n    preprocessCommand: function EvaluatorPreprocessor_preprocessCommand(fn, args) {\n      switch (fn | 0) {\n        case _util.OPS.save:\n          this.stateManager.save();\n          break;\n        case _util.OPS.restore:\n          this.stateManager.restore();\n          break;\n        case _util.OPS.transform:\n          this.stateManager.transform(args);\n          break;\n      }\n    }\n  };\n  return EvaluatorPreprocessor;\n}();\nexports.PartialEvaluator = PartialEvaluator;\n\n/***/ }),\n/* 140 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CMapFactory = exports.IdentityCMap = exports.CMap = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _primitives = __w_pdfjs_require__(123);\n\nvar _parser = __w_pdfjs_require__(124);\n\nvar _stream = __w_pdfjs_require__(125);\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar 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'];\n\nvar CMap = function () {\n  function CMap() {\n    var builtInCMap = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n    _classCallCheck(this, CMap);\n\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\n  _createClass(CMap, [{\n    key: 'addCodespaceRange',\n    value: function addCodespaceRange(n, low, high) {\n      this.codespaceRanges[n - 1].push(low, high);\n      this.numCodespaceRanges++;\n    }\n  }, {\n    key: 'mapCidRange',\n    value: function mapCidRange(low, high, dstLow) {\n      while (low <= high) {\n        this._map[low++] = dstLow++;\n      }\n    }\n  }, {\n    key: 'mapBfRange',\n    value: function mapBfRange(low, high, dstLow) {\n      var lastByte = dstLow.length - 1;\n      while (low <= high) {\n        this._map[low++] = dstLow;\n        dstLow = dstLow.substr(0, lastByte) + String.fromCharCode(dstLow.charCodeAt(lastByte) + 1);\n      }\n    }\n  }, {\n    key: 'mapBfRangeToArray',\n    value: function mapBfRangeToArray(low, high, array) {\n      var i = 0,\n          ii = array.length;\n      while (low <= high && i < ii) {\n        this._map[low] = array[i++];\n        ++low;\n      }\n    }\n  }, {\n    key: 'mapOne',\n    value: function mapOne(src, dst) {\n      this._map[src] = dst;\n    }\n  }, {\n    key: 'lookup',\n    value: function lookup(code) {\n      return this._map[code];\n    }\n  }, {\n    key: 'contains',\n    value: function contains(code) {\n      return this._map[code] !== undefined;\n    }\n  }, {\n    key: 'forEach',\n    value: function forEach(callback) {\n      var map = this._map;\n      var length = map.length;\n      if (length <= 0x10000) {\n        for (var i = 0; i < length; i++) {\n          if (map[i] !== undefined) {\n            callback(i, map[i]);\n          }\n        }\n      } else {\n        for (var _i in map) {\n          callback(_i, map[_i]);\n        }\n      }\n    }\n  }, {\n    key: 'charCodeOf',\n    value: function charCodeOf(value) {\n      var map = this._map;\n      if (map.length <= 0x10000) {\n        return map.indexOf(value);\n      }\n      for (var charCode in map) {\n        if (map[charCode] === value) {\n          return charCode | 0;\n        }\n      }\n      return -1;\n    }\n  }, {\n    key: 'getMap',\n    value: function getMap() {\n      return this._map;\n    }\n  }, {\n    key: 'readCharCode',\n    value: function readCharCode(str, offset, out) {\n      var c = 0;\n      var codespaceRanges = this.codespaceRanges;\n      for (var n = 0, nn = codespaceRanges.length; n < nn; n++) {\n        c = (c << 8 | str.charCodeAt(offset + n)) >>> 0;\n        var codespaceRange = codespaceRanges[n];\n        for (var k = 0, kk = codespaceRange.length; k < kk;) {\n          var low = codespaceRange[k++];\n          var 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  }, {\n    key: 'length',\n    get: function get() {\n      return this._map.length;\n    }\n  }, {\n    key: 'isIdentityCMap',\n    get: function get() {\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 (var i = 0; i < 0x10000; i++) {\n        if (this._map[i] !== i) {\n          return false;\n        }\n      }\n      return true;\n    }\n  }]);\n\n  return CMap;\n}();\n\nvar IdentityCMap = function (_CMap) {\n  _inherits(IdentityCMap, _CMap);\n\n  function IdentityCMap(vertical, n) {\n    _classCallCheck(this, IdentityCMap);\n\n    var _this = _possibleConstructorReturn(this, (IdentityCMap.__proto__ || Object.getPrototypeOf(IdentityCMap)).call(this));\n\n    _this.vertical = vertical;\n    _this.addCodespaceRange(n, 0, 0xffff);\n    return _this;\n  }\n\n  _createClass(IdentityCMap, [{\n    key: 'mapCidRange',\n    value: function mapCidRange(low, high, dstLow) {\n      (0, _util.unreachable)('should not call mapCidRange');\n    }\n  }, {\n    key: 'mapBfRange',\n    value: function mapBfRange(low, high, dstLow) {\n      (0, _util.unreachable)('should not call mapBfRange');\n    }\n  }, {\n    key: 'mapBfRangeToArray',\n    value: function mapBfRangeToArray(low, high, array) {\n      (0, _util.unreachable)('should not call mapBfRangeToArray');\n    }\n  }, {\n    key: 'mapOne',\n    value: function mapOne(src, dst) {\n      (0, _util.unreachable)('should not call mapCidOne');\n    }\n  }, {\n    key: 'lookup',\n    value: function lookup(code) {\n      return Number.isInteger(code) && code <= 0xffff ? code : undefined;\n    }\n  }, {\n    key: 'contains',\n    value: function contains(code) {\n      return Number.isInteger(code) && code <= 0xffff;\n    }\n  }, {\n    key: 'forEach',\n    value: function forEach(callback) {\n      for (var i = 0; i <= 0xffff; i++) {\n        callback(i, i);\n      }\n    }\n  }, {\n    key: 'charCodeOf',\n    value: function charCodeOf(value) {\n      return Number.isInteger(value) && value <= 0xffff ? value : -1;\n    }\n  }, {\n    key: 'getMap',\n    value: function getMap() {\n      var map = new Array(0x10000);\n      for (var i = 0; i <= 0xffff; i++) {\n        map[i] = i;\n      }\n      return map;\n    }\n  }, {\n    key: 'length',\n    get: function get() {\n      return 0x10000;\n    }\n  }, {\n    key: 'isIdentityCMap',\n    get: function get() {\n      (0, _util.unreachable)('should not access .isIdentityCMap');\n    }\n  }]);\n\n  return IdentityCMap;\n}(CMap);\n\nvar BinaryCMapReader = function BinaryCMapReaderClosure() {\n  function hexToInt(a, size) {\n    var n = 0;\n    for (var i = 0; i <= size; i++) {\n      n = n << 8 | a[i];\n    }\n    return n >>> 0;\n  }\n  function 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.apply(null, a.subarray(0, size + 1));\n  }\n  function addHex(a, b, size) {\n    var c = 0;\n    for (var i = size; i >= 0; i--) {\n      c += a[i] + b[i];\n      a[i] = c & 255;\n      c >>= 8;\n    }\n  }\n  function incHex(a, size) {\n    var c = 1;\n    for (var i = size; i >= 0 && c > 0; i--) {\n      c += a[i];\n      a[i] = c & 255;\n      c >>= 8;\n    }\n  }\n  var MAX_NUM_SIZE = 16;\n  var MAX_ENCODED_NUM_SIZE = 19;\n  function BinaryCMapStream(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  BinaryCMapStream.prototype = {\n    readByte: function readByte() {\n      if (this.pos >= this.end) {\n        return -1;\n      }\n      return this.buffer[this.pos++];\n    },\n    readNumber: function readNumber() {\n      var n = 0;\n      var last;\n      do {\n        var b = this.readByte();\n        if (b < 0) {\n          throw new _util.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: function readSigned() {\n      var n = this.readNumber();\n      return n & 1 ? ~(n >>> 1) : n >>> 1;\n    },\n    readHex: function readHex(num, size) {\n      num.set(this.buffer.subarray(this.pos, this.pos + size + 1));\n      this.pos += size + 1;\n    },\n    readHexNumber: function readHexNumber(num, size) {\n      var last;\n      var stack = this.tmpBuf,\n          sp = 0;\n      do {\n        var b = this.readByte();\n        if (b < 0) {\n          throw new _util.FormatError('unexpected EOF in bcmap');\n        }\n        last = !(b & 0x80);\n        stack[sp++] = b & 0x7F;\n      } while (!last);\n      var i = size,\n          buffer = 0,\n          bufferSize = 0;\n      while (i >= 0) {\n        while (bufferSize < 8 && stack.length > 0) {\n          buffer = stack[--sp] << bufferSize | buffer;\n          bufferSize += 7;\n        }\n        num[i] = buffer & 255;\n        i--;\n        buffer >>= 8;\n        bufferSize -= 8;\n      }\n    },\n    readHexSigned: function readHexSigned(num, size) {\n      this.readHexNumber(num, size);\n      var sign = num[size] & 1 ? 255 : 0;\n      var c = 0;\n      for (var i = 0; i <= size; i++) {\n        c = (c & 1) << 8 | num[i];\n        num[i] = c >> 1 ^ sign;\n      }\n    },\n    readString: function readString() {\n      var len = this.readNumber();\n      var s = '';\n      for (var i = 0; i < len; i++) {\n        s += String.fromCharCode(this.readNumber());\n      }\n      return s;\n    }\n  };\n  function processBinaryCMap(data, cMap, extend) {\n    return new Promise(function (resolve, reject) {\n      var stream = new BinaryCMapStream(data);\n      var header = stream.readByte();\n      cMap.vertical = !!(header & 1);\n      var useCMap = null;\n      var start = new Uint8Array(MAX_NUM_SIZE);\n      var end = new Uint8Array(MAX_NUM_SIZE);\n      var char = new Uint8Array(MAX_NUM_SIZE);\n      var charCode = new Uint8Array(MAX_NUM_SIZE);\n      var tmp = new Uint8Array(MAX_NUM_SIZE);\n      var code;\n      var b;\n      while ((b = stream.readByte()) >= 0) {\n        var 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        var sequence = !!(b & 0x10);\n        var dataSize = b & 15;\n        if (dataSize + 1 > MAX_NUM_SIZE) {\n          throw new Error('processBinaryCMap: Invalid dataSize.');\n        }\n        var ucs2DataSize = 1;\n        var subitemsCount = stream.readNumber();\n        var i;\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 (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 (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 (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 (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 (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 (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            reject(new Error('processBinaryCMap: Unknown type: ' + type));\n            return;\n        }\n      }\n      if (useCMap) {\n        resolve(extend(useCMap));\n        return;\n      }\n      resolve(cMap);\n    });\n  }\n  function BinaryCMapReader() {}\n  BinaryCMapReader.prototype = { process: processBinaryCMap };\n  return BinaryCMapReader;\n}();\nvar CMapFactory = function CMapFactoryClosure() {\n  function strToInt(str) {\n    var a = 0;\n    for (var i = 0; i < str.length; i++) {\n      a = a << 8 | str.charCodeAt(i);\n    }\n    return a >>> 0;\n  }\n  function expectString(obj) {\n    if (!(0, _util.isString)(obj)) {\n      throw new _util.FormatError('Malformed CMap: expected string.');\n    }\n  }\n  function expectInt(obj) {\n    if (!Number.isInteger(obj)) {\n      throw new _util.FormatError('Malformed CMap: expected int.');\n    }\n  }\n  function parseBfChar(cMap, lexer) {\n    while (true) {\n      var obj = lexer.getObj();\n      if ((0, _primitives.isEOF)(obj)) {\n        break;\n      }\n      if ((0, _primitives.isCmd)(obj, 'endbfchar')) {\n        return;\n      }\n      expectString(obj);\n      var src = strToInt(obj);\n      obj = lexer.getObj();\n      expectString(obj);\n      var dst = obj;\n      cMap.mapOne(src, dst);\n    }\n  }\n  function parseBfRange(cMap, lexer) {\n    while (true) {\n      var obj = lexer.getObj();\n      if ((0, _primitives.isEOF)(obj)) {\n        break;\n      }\n      if ((0, _primitives.isCmd)(obj, 'endbfrange')) {\n        return;\n      }\n      expectString(obj);\n      var low = strToInt(obj);\n      obj = lexer.getObj();\n      expectString(obj);\n      var high = strToInt(obj);\n      obj = lexer.getObj();\n      if (Number.isInteger(obj) || (0, _util.isString)(obj)) {\n        var dstLow = Number.isInteger(obj) ? String.fromCharCode(obj) : obj;\n        cMap.mapBfRange(low, high, dstLow);\n      } else if ((0, _primitives.isCmd)(obj, '[')) {\n        obj = lexer.getObj();\n        var array = [];\n        while (!(0, _primitives.isCmd)(obj, ']') && !(0, _primitives.isEOF)(obj)) {\n          array.push(obj);\n          obj = lexer.getObj();\n        }\n        cMap.mapBfRangeToArray(low, high, array);\n      } else {\n        break;\n      }\n    }\n    throw new _util.FormatError('Invalid bf range.');\n  }\n  function parseCidChar(cMap, lexer) {\n    while (true) {\n      var obj = lexer.getObj();\n      if ((0, _primitives.isEOF)(obj)) {\n        break;\n      }\n      if ((0, _primitives.isCmd)(obj, 'endcidchar')) {\n        return;\n      }\n      expectString(obj);\n      var src = strToInt(obj);\n      obj = lexer.getObj();\n      expectInt(obj);\n      var dst = obj;\n      cMap.mapOne(src, dst);\n    }\n  }\n  function parseCidRange(cMap, lexer) {\n    while (true) {\n      var obj = lexer.getObj();\n      if ((0, _primitives.isEOF)(obj)) {\n        break;\n      }\n      if ((0, _primitives.isCmd)(obj, 'endcidrange')) {\n        return;\n      }\n      expectString(obj);\n      var low = strToInt(obj);\n      obj = lexer.getObj();\n      expectString(obj);\n      var high = strToInt(obj);\n      obj = lexer.getObj();\n      expectInt(obj);\n      var dstLow = obj;\n      cMap.mapCidRange(low, high, dstLow);\n    }\n  }\n  function parseCodespaceRange(cMap, lexer) {\n    while (true) {\n      var obj = lexer.getObj();\n      if ((0, _primitives.isEOF)(obj)) {\n        break;\n      }\n      if ((0, _primitives.isCmd)(obj, 'endcodespacerange')) {\n        return;\n      }\n      if (!(0, _util.isString)(obj)) {\n        break;\n      }\n      var low = strToInt(obj);\n      obj = lexer.getObj();\n      if (!(0, _util.isString)(obj)) {\n        break;\n      }\n      var high = strToInt(obj);\n      cMap.addCodespaceRange(obj.length, low, high);\n    }\n    throw new _util.FormatError('Invalid codespace range.');\n  }\n  function parseWMode(cMap, lexer) {\n    var obj = lexer.getObj();\n    if (Number.isInteger(obj)) {\n      cMap.vertical = !!obj;\n    }\n  }\n  function parseCMapName(cMap, lexer) {\n    var obj = lexer.getObj();\n    if ((0, _primitives.isName)(obj) && (0, _util.isString)(obj.name)) {\n      cMap.name = obj.name;\n    }\n  }\n  function parseCMap(cMap, lexer, fetchBuiltInCMap, useCMap) {\n    var previous;\n    var embeddedUseCMap;\n    objLoop: while (true) {\n      try {\n        var obj = lexer.getObj();\n        if ((0, _primitives.isEOF)(obj)) {\n          break;\n        } else if ((0, _primitives.isName)(obj)) {\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 ((0, _primitives.isCmd)(obj)) {\n          switch (obj.cmd) {\n            case 'endcmap':\n              break objLoop;\n            case 'usecmap':\n              if ((0, _primitives.isName)(previous)) {\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 _util.MissingDataException) {\n          throw ex;\n        }\n        (0, _util.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 Promise.resolve(cMap);\n  }\n  function extendCMap(cMap, fetchBuiltInCMap, useCMap) {\n    return createBuiltInCMap(useCMap, fetchBuiltInCMap).then(function (newCMap) {\n      cMap.useCMap = newCMap;\n      if (cMap.numCodespaceRanges === 0) {\n        var useCodespaceRanges = cMap.useCMap.codespaceRanges;\n        for (var 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    });\n  }\n  function createBuiltInCMap(name, fetchBuiltInCMap) {\n    if (name === 'Identity-H') {\n      return Promise.resolve(new IdentityCMap(false, 2));\n    } else if (name === 'Identity-V') {\n      return Promise.resolve(new IdentityCMap(true, 2));\n    }\n    if (!BUILT_IN_CMAPS.includes(name)) {\n      return Promise.reject(new Error('Unknown CMap name: ' + name));\n    }\n    if (!fetchBuiltInCMap) {\n      return Promise.reject(new Error('Built-in CMap parameters are not provided.'));\n    }\n    return fetchBuiltInCMap(name).then(function (data) {\n      var cMapData = data.cMapData,\n          compressionType = data.compressionType;\n      var cMap = new CMap(true);\n      if (compressionType === _util.CMapCompressionType.BINARY) {\n        return new BinaryCMapReader().process(cMapData, cMap, function (useCMap) {\n          return extendCMap(cMap, fetchBuiltInCMap, useCMap);\n        });\n      }\n      if (compressionType === _util.CMapCompressionType.NONE) {\n        var lexer = new _parser.Lexer(new _stream.Stream(cMapData));\n        return parseCMap(cMap, lexer, fetchBuiltInCMap, null);\n      }\n      return Promise.reject(new Error('TODO: Only BINARY/NONE CMap compression is currently supported.'));\n    });\n  }\n  return {\n    create: function create(params) {\n      var encoding = params.encoding;\n      var fetchBuiltInCMap = params.fetchBuiltInCMap;\n      var useCMap = params.useCMap;\n      if ((0, _primitives.isName)(encoding)) {\n        return createBuiltInCMap(encoding.name, fetchBuiltInCMap);\n      } else if ((0, _primitives.isStream)(encoding)) {\n        var cMap = new CMap();\n        var lexer = new _parser.Lexer(encoding);\n        return parseCMap(cMap, lexer, fetchBuiltInCMap, useCMap).then(function (parsedCMap) {\n          if (parsedCMap.isIdentityCMap) {\n            return createBuiltInCMap(parsedCMap.name, fetchBuiltInCMap);\n          }\n          return parsedCMap;\n        });\n      }\n      return Promise.reject(new Error('Encoding required.'));\n    }\n  };\n}();\nexports.CMap = CMap;\nexports.IdentityCMap = IdentityCMap;\nexports.CMapFactory = CMapFactory;\n\n/***/ }),\n/* 141 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.getFontType = exports.ProblematicCharRanges = exports.IdentityToUnicodeMap = exports.ToUnicodeMap = exports.FontFlags = exports.Font = exports.ErrorFont = exports.PRIVATE_USE_OFFSET_END = exports.PRIVATE_USE_OFFSET_START = exports.SEAC_ANALYSIS_ENABLED = undefined;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _cff_parser = __w_pdfjs_require__(142);\n\nvar _glyphlist = __w_pdfjs_require__(145);\n\nvar _encodings = __w_pdfjs_require__(144);\n\nvar _standard_fonts = __w_pdfjs_require__(146);\n\nvar _unicode = __w_pdfjs_require__(147);\n\nvar _font_renderer = __w_pdfjs_require__(148);\n\nvar _cmap = __w_pdfjs_require__(140);\n\nvar _stream = __w_pdfjs_require__(125);\n\nvar _type1_parser = __w_pdfjs_require__(149);\n\nvar PRIVATE_USE_OFFSET_START = 0xE000;\nvar PRIVATE_USE_OFFSET_END = 0xF8FF;\nvar SKIP_PRIVATE_USE_RANGE_F000_TO_F01F = false;\nvar PDF_GLYPH_SPACE_UNITS = 1000;\nvar SEAC_ANALYSIS_ENABLED = false;\nvar 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};\nvar 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 adjustWidths(properties) {\n  if (!properties.fontMatrix) {\n    return;\n  }\n  if (properties.fontMatrix[0] === _util.FONT_IDENTITY_MATRIX[0]) {\n    return;\n  }\n  var scale = 0.001 / properties.fontMatrix[0];\n  var glyphsWidths = properties.widths;\n  for (var glyph in glyphsWidths) {\n    glyphsWidths[glyph] *= scale;\n  }\n  properties.defaultWidth *= scale;\n}\nfunction adjustToUnicode(properties, builtInEncoding) {\n  if (properties.hasIncludedToUnicodeMap) {\n    return;\n  }\n  if (properties.hasEncoding) {\n    return;\n  }\n  if (builtInEncoding === properties.defaultEncoding) {\n    return;\n  }\n  if (properties.toUnicode instanceof IdentityToUnicodeMap) {\n    return;\n  }\n  var toUnicode = [],\n      glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();\n  for (var charCode in builtInEncoding) {\n    var glyphName = builtInEncoding[charCode];\n    var unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap);\n    if (unicode !== -1) {\n      toUnicode[charCode] = String.fromCharCode(unicode);\n    }\n  }\n  properties.toUnicode.amend(toUnicode);\n}\nfunction getFontType(type, subtype) {\n  switch (type) {\n    case 'Type1':\n      return subtype === 'Type1C' ? _util.FontType.TYPE1C : _util.FontType.TYPE1;\n    case 'CIDFontType0':\n      return subtype === 'CIDFontType0C' ? _util.FontType.CIDFONTTYPE0C : _util.FontType.CIDFONTTYPE0;\n    case 'OpenType':\n      return _util.FontType.OPENTYPE;\n    case 'TrueType':\n      return _util.FontType.TRUETYPE;\n    case 'CIDFontType2':\n      return _util.FontType.CIDFONTTYPE2;\n    case 'MMType1':\n      return _util.FontType.MMTYPE1;\n    case 'Type0':\n      return _util.FontType.TYPE0;\n    default:\n      return _util.FontType.UNKNOWN;\n  }\n}\nfunction recoverGlyphName(name, glyphsUnicodeMap) {\n  if (glyphsUnicodeMap[name] !== undefined) {\n    return name;\n  }\n  var unicode = (0, _unicode.getUnicodeForGlyph)(name, glyphsUnicodeMap);\n  if (unicode !== -1) {\n    for (var key in glyphsUnicodeMap) {\n      if (glyphsUnicodeMap[key] === unicode) {\n        return key;\n      }\n    }\n  }\n  (0, _util.info)('Unable to recover a standard glyph name for: ' + name);\n  return name;\n}\nvar Glyph = function GlyphClosure() {\n  function Glyph(fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont) {\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  Glyph.prototype.matchesForCache = function (fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont) {\n    return this.fontChar === fontChar && this.unicode === unicode && this.accent === accent && this.width === width && this.vmetric === vmetric && this.operatorListId === operatorListId && this.isSpace === isSpace && this.isInFont === isInFont;\n  };\n  return Glyph;\n}();\nvar ToUnicodeMap = function ToUnicodeMapClosure() {\n  function ToUnicodeMap() {\n    var cmap = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n    this._map = cmap;\n  }\n  ToUnicodeMap.prototype = {\n    get length() {\n      return this._map.length;\n    },\n    forEach: function forEach(callback) {\n      for (var charCode in this._map) {\n        callback(charCode, this._map[charCode].charCodeAt(0));\n      }\n    },\n    has: function has(i) {\n      return this._map[i] !== undefined;\n    },\n    get: function get(i) {\n      return this._map[i];\n    },\n    charCodeOf: function charCodeOf(value) {\n      var map = this._map;\n      if (map.length <= 0x10000) {\n        return map.indexOf(value);\n      }\n      for (var charCode in map) {\n        if (map[charCode] === value) {\n          return charCode | 0;\n        }\n      }\n      return -1;\n    },\n    amend: function amend(map) {\n      for (var charCode in map) {\n        this._map[charCode] = map[charCode];\n      }\n    }\n  };\n  return ToUnicodeMap;\n}();\nvar IdentityToUnicodeMap = function IdentityToUnicodeMapClosure() {\n  function IdentityToUnicodeMap(firstChar, lastChar) {\n    this.firstChar = firstChar;\n    this.lastChar = lastChar;\n  }\n  IdentityToUnicodeMap.prototype = {\n    get length() {\n      return this.lastChar + 1 - this.firstChar;\n    },\n    forEach: function forEach(callback) {\n      for (var i = this.firstChar, ii = this.lastChar; i <= ii; i++) {\n        callback(i, i);\n      }\n    },\n    has: function has(i) {\n      return this.firstChar <= i && i <= this.lastChar;\n    },\n    get: function get(i) {\n      if (this.firstChar <= i && i <= this.lastChar) {\n        return String.fromCharCode(i);\n      }\n      return undefined;\n    },\n    charCodeOf: function charCodeOf(v) {\n      return Number.isInteger(v) && v >= this.firstChar && v <= this.lastChar ? v : -1;\n    },\n    amend: function amend(map) {\n      (0, _util.unreachable)('Should not call amend()');\n    }\n  };\n  return IdentityToUnicodeMap;\n}();\nvar OpenTypeFileBuilder = function OpenTypeFileBuilderClosure() {\n  function writeInt16(dest, offset, num) {\n    dest[offset] = num >> 8 & 0xFF;\n    dest[offset + 1] = num & 0xFF;\n  }\n  function 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  }\n  function writeData(dest, offset, data) {\n    var i, ii;\n    if (data instanceof Uint8Array) {\n      dest.set(data, offset);\n    } else if (typeof data === 'string') {\n      for (i = 0, ii = data.length; i < ii; i++) {\n        dest[offset++] = data.charCodeAt(i) & 0xFF;\n      }\n    } else {\n      for (i = 0, ii = data.length; i < ii; i++) {\n        dest[offset++] = data[i] & 0xFF;\n      }\n    }\n  }\n  function OpenTypeFileBuilder(sfnt) {\n    this.sfnt = sfnt;\n    this.tables = Object.create(null);\n  }\n  OpenTypeFileBuilder.getSearchParams = function OpenTypeFileBuilder_getSearchParams(entriesCount, entrySize) {\n    var maxPower2 = 1,\n        log2 = 0;\n    while ((maxPower2 ^ entriesCount) > maxPower2) {\n      maxPower2 <<= 1;\n      log2++;\n    }\n    var searchRange = maxPower2 * entrySize;\n    return {\n      range: searchRange,\n      entry: log2,\n      rangeShift: entrySize * entriesCount - searchRange\n    };\n  };\n  var OTF_HEADER_SIZE = 12;\n  var OTF_TABLE_ENTRY_SIZE = 16;\n  OpenTypeFileBuilder.prototype = {\n    toArray: function OpenTypeFileBuilder_toArray() {\n      var sfnt = this.sfnt;\n      var tables = this.tables;\n      var tablesNames = Object.keys(tables);\n      tablesNames.sort();\n      var numTables = tablesNames.length;\n      var i, j, jj, table, tableName;\n      var offset = OTF_HEADER_SIZE + numTables * OTF_TABLE_ENTRY_SIZE;\n      var tableOffsets = [offset];\n      for (i = 0; i < numTables; i++) {\n        table = tables[tablesNames[i]];\n        var paddedLength = (table.length + 3 & ~3) >>> 0;\n        offset += paddedLength;\n        tableOffsets.push(offset);\n      }\n      var 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 = (0, _util.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      var 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        var checksum = 0;\n        for (j = tableOffsets[i], jj = tableOffsets[i + 1]; j < jj; j += 4) {\n          var quad = (0, _util.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: function OpenTypeFileBuilder_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  return OpenTypeFileBuilder;\n}();\nvar ProblematicCharRanges = new Int32Array([0x0000, 0x0020, 0x007F, 0x00A1, 0x00AD, 0x00AE, 0x0600, 0x0780, 0x08A0, 0x10A0, 0x1780, 0x1800, 0x1C00, 0x1C50, 0x2000, 0x2010, 0x2011, 0x2012, 0x2028, 0x2030, 0x205F, 0x2070, 0x25CC, 0x25CD, 0x3000, 0x3001, 0x3164, 0x3165, 0xAA60, 0xAA80, 0xD800, 0xE000, 0xFFF0, 0x10000]);\nvar Font = function FontClosure() {\n  function Font(name, file, properties) {\n    var charCode;\n    this.name = name;\n    this.loadedName = properties.loadedName;\n    this.isType3Font = properties.isType3Font;\n    this.sizes = [];\n    this.missingFile = false;\n    this.glyphCache = Object.create(null);\n    this.isSerifFont = !!(properties.flags & FontFlags.Serif);\n    this.isSymbolicFont = !!(properties.flags & FontFlags.Symbolic);\n    this.isMonospace = !!(properties.flags & FontFlags.FixedPitch);\n    var type = properties.type;\n    var subtype = properties.subtype;\n    this.type = type;\n    this.subtype = subtype;\n    this.fallbackName = this.isMonospace ? 'monospace' : this.isSerifFont ? 'serif' : 'sans-serif';\n    this.differences = properties.differences;\n    this.widths = properties.widths;\n    this.defaultWidth = properties.defaultWidth;\n    this.composite = properties.composite;\n    this.wideChars = properties.wideChars;\n    this.cMap = properties.cMap;\n    this.ascent = properties.ascent / PDF_GLYPH_SPACE_UNITS;\n    this.descent = properties.descent / PDF_GLYPH_SPACE_UNITS;\n    this.fontMatrix = properties.fontMatrix;\n    this.bbox = properties.bbox;\n    this.defaultEncoding = properties.defaultEncoding;\n    this.toUnicode = properties.toUnicode;\n    this.fallbackToUnicode = properties.fallbackToUnicode || new ToUnicodeMap();\n    this.toFontChar = [];\n    if (properties.type === 'Type3') {\n      for (charCode = 0; charCode < 256; charCode++) {\n        this.toFontChar[charCode] = this.differences[charCode] || properties.defaultEncoding[charCode];\n      }\n      this.fontType = _util.FontType.TYPE3;\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        (0, _util.warn)('Font file is empty in \"' + name + '\" (' + this.loadedName + ')');\n      }\n      this.fallbackToSystemFont();\n      return;\n    }\n    if (subtype === 'Type1C') {\n      if (type !== 'Type1' && type !== 'MMType1') {\n        if (isTrueTypeFile(file)) {\n          subtype = 'TrueType';\n        } else {\n          type = 'Type1';\n        }\n      } else if (isOpenTypeFile(file)) {\n        subtype = 'OpenType';\n      }\n    }\n    if (subtype === 'CIDFontType0C' && type !== 'CIDFontType0') {\n      type = 'CIDFontType0';\n    }\n    if (type === 'CIDFontType0') {\n      if (isType1File(file)) {\n        subtype = 'CIDFontType0';\n      } else if (isOpenTypeFile(file)) {\n        subtype = 'OpenType';\n      } else {\n        subtype = 'CIDFontType0C';\n      }\n    }\n    if (subtype === 'OpenType' && type !== 'OpenType') {\n      type = 'OpenType';\n    }\n    try {\n      var data;\n      switch (type) {\n        case 'MMType1':\n          (0, _util.info)('MMType1 font (' + name + '), falling back to Type1.');\n        case 'Type1':\n        case 'CIDFontType0':\n          this.mimetype = 'font/opentype';\n          var 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 _util.FormatError('Font ' + type + ' is not supported');\n      }\n    } catch (e) {\n      if (!(e instanceof _util.FormatError)) {\n        throw e;\n      }\n      (0, _util.warn)(e);\n      this.fallbackToSystemFont();\n      return;\n    }\n    this.data = data;\n    this.fontType = getFontType(type, subtype);\n    this.fontMatrix = properties.fontMatrix;\n    this.widths = properties.widths;\n    this.defaultWidth = properties.defaultWidth;\n    this.toUnicode = properties.toUnicode;\n    this.encoding = properties.baseEncoding;\n    this.seacMap = properties.seacMap;\n    this.loading = true;\n  }\n  Font.getFontID = function () {\n    var ID = 1;\n    return function Font_getFontID() {\n      return String(ID++);\n    };\n  }();\n  function int16(b0, b1) {\n    return (b0 << 8) + b1;\n  }\n  function writeSignedInt16(bytes, index, value) {\n    bytes[index + 1] = value;\n    bytes[index] = value >>> 8;\n  }\n  function signedInt16(b0, b1) {\n    var value = (b0 << 8) + b1;\n    return value & 1 << 15 ? value - 0x10000 : value;\n  }\n  function int32(b0, b1, b2, b3) {\n    return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;\n  }\n  function string16(value) {\n    return String.fromCharCode(value >> 8 & 0xff, value & 0xff);\n  }\n  function safeString16(value) {\n    value = value > 0x7FFF ? 0x7FFF : value < -0x8000 ? -0x8000 : value;\n    return String.fromCharCode(value >> 8 & 0xff, value & 0xff);\n  }\n  function isTrueTypeFile(file) {\n    var header = file.peekBytes(4);\n    return (0, _util.readUint32)(header, 0) === 0x00010000;\n  }\n  function isTrueTypeCollectionFile(file) {\n    var header = file.peekBytes(4);\n    return (0, _util.bytesToString)(header) === 'ttcf';\n  }\n  function isOpenTypeFile(file) {\n    var header = file.peekBytes(4);\n    return (0, _util.bytesToString)(header) === 'OTTO';\n  }\n  function isType1File(file) {\n    var 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  }\n  function buildToFontChar(encoding, glyphsUnicodeMap, differences) {\n    var toFontChar = [],\n        unicode;\n    for (var i = 0, ii = encoding.length; i < ii; i++) {\n      unicode = (0, _unicode.getUnicodeForGlyph)(encoding[i], glyphsUnicodeMap);\n      if (unicode !== -1) {\n        toFontChar[i] = unicode;\n      }\n    }\n    for (var charCode in differences) {\n      unicode = (0, _unicode.getUnicodeForGlyph)(differences[charCode], glyphsUnicodeMap);\n      if (unicode !== -1) {\n        toFontChar[+charCode] = unicode;\n      }\n    }\n    return toFontChar;\n  }\n  function isProblematicUnicodeLocation(code) {\n    var i = 0,\n        j = ProblematicCharRanges.length - 1;\n    while (i < j) {\n      var c = i + j + 1 >> 1;\n      if (code < ProblematicCharRanges[c]) {\n        j = c - 1;\n      } else {\n        i = c;\n      }\n    }\n    return !(i & 1);\n  }\n  function adjustMapping(charCodeToGlyphId, properties, missingGlyphs) {\n    var toUnicode = properties.toUnicode;\n    var isSymbolic = !!(properties.flags & FontFlags.Symbolic);\n    var isIdentityUnicode = properties.toUnicode instanceof IdentityToUnicodeMap;\n    var newMap = Object.create(null);\n    var toFontChar = [];\n    var usedFontCharCodes = [];\n    var nextAvailableFontCharCode = PRIVATE_USE_OFFSET_START;\n    for (var originalCharCode in charCodeToGlyphId) {\n      originalCharCode |= 0;\n      var glyphId = charCodeToGlyphId[originalCharCode];\n      if (missingGlyphs[glyphId]) {\n        continue;\n      }\n      var fontCharCode = originalCharCode;\n      var hasUnicodeValue = false;\n      if (!isIdentityUnicode && toUnicode.has(originalCharCode)) {\n        hasUnicodeValue = true;\n        var unicode = toUnicode.get(fontCharCode);\n        if (unicode.length === 1) {\n          fontCharCode = unicode.charCodeAt(0);\n        }\n      }\n      if (usedFontCharCodes[fontCharCode] !== undefined || isProblematicUnicodeLocation(fontCharCode) || isSymbolic && !hasUnicodeValue) {\n        do {\n          if (nextAvailableFontCharCode > PRIVATE_USE_OFFSET_END) {\n            (0, _util.warn)('Ran out of space in font private use area.');\n            break;\n          }\n          fontCharCode = nextAvailableFontCharCode++;\n          if (SKIP_PRIVATE_USE_RANGE_F000_TO_F01F && fontCharCode === 0xF000) {\n            fontCharCode = 0xF020;\n            nextAvailableFontCharCode = fontCharCode + 1;\n          }\n        } while (usedFontCharCodes[fontCharCode] !== undefined);\n      }\n      newMap[fontCharCode] = glyphId;\n      toFontChar[originalCharCode] = fontCharCode;\n      usedFontCharCodes[fontCharCode] = true;\n    }\n    return {\n      toFontChar: toFontChar,\n      charCodeToGlyphId: newMap,\n      nextAvailableFontCharCode: nextAvailableFontCharCode\n    };\n  }\n  function getRanges(glyphs, numGlyphs) {\n    var codes = [];\n    for (var 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 (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    var ranges = [];\n    var length = codes.length;\n    for (var n = 0; n < length;) {\n      var start = codes[n].fontCharCode;\n      var codeIndices = [codes[n].glyphId];\n      ++n;\n      var 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  }\n  function createCmapTable(glyphs, numGlyphs) {\n    var ranges = getRanges(glyphs, numGlyphs);\n    var numTables = ranges[ranges.length - 1][1] > 0xFFFF ? 2 : 1;\n    var cmap = '\\x00\\x00' + string16(numTables) + '\\x00\\x03' + '\\x00\\x01' + (0, _util.string32)(4 + numTables * 8);\n    var i, ii, j, jj;\n    for (i = ranges.length - 1; i >= 0; --i) {\n      if (ranges[i][0] <= 0xFFFF) {\n        break;\n      }\n    }\n    var bmpLength = i + 1;\n    if (ranges[i][0] < 0xFFFF && ranges[i][1] === 0xFFFF) {\n      ranges[i][1] = 0xFFFE;\n    }\n    var trailingRangesCount = ranges[i][1] < 0xFFFF ? 1 : 0;\n    var segCount = bmpLength + trailingRangesCount;\n    var searchParams = OpenTypeFileBuilder.getSearchParams(segCount, 2);\n    var startCount = '';\n    var endCount = '';\n    var idDeltas = '';\n    var idRangeOffsets = '';\n    var glyphsIds = '';\n    var bias = 0;\n    var 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      var 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        var 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        var 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    var format314 = '\\x00\\x00' + string16(2 * segCount) + string16(searchParams.range) + string16(searchParams.entry) + string16(searchParams.rangeShift) + endCount + '\\x00\\x00' + startCount + idDeltas + idRangeOffsets + glyphsIds;\n    var format31012 = '';\n    var header31012 = '';\n    if (numTables > 1) {\n      cmap += '\\x00\\x03' + '\\x00\\x0A' + (0, _util.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        var 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 += (0, _util.string32)(start) + (0, _util.string32)(end) + (0, _util.string32)(code);\n            start = end + 1;\n            code = codes[j];\n          }\n        }\n        format31012 += (0, _util.string32)(start) + (0, _util.string32)(range[1]) + (0, _util.string32)(code);\n      }\n      header31012 = '\\x00\\x0C' + '\\x00\\x00' + (0, _util.string32)(format31012.length + 16) + '\\x00\\x00\\x00\\x00' + (0, _util.string32)(format31012.length / 12);\n    }\n    return cmap + '\\x00\\x04' + string16(format314.length + 4) + format314 + header31012 + format31012;\n  }\n  function validateOS2Table(os2) {\n    var stream = new _stream.Stream(os2.data);\n    var version = stream.getUint16();\n    stream.getBytes(60);\n    var selection = stream.getUint16();\n    if (version < 4 && selection & 0x0300) {\n      return false;\n    }\n    var firstChar = stream.getUint16();\n    var lastChar = stream.getUint16();\n    if (firstChar > lastChar) {\n      return false;\n    }\n    stream.getBytes(6);\n    var usWinAscent = stream.getUint16();\n    if (usWinAscent === 0) {\n      return false;\n    }\n    os2.data[8] = os2.data[9] = 0;\n    return true;\n  }\n  function createOS2Table(properties, charstrings, override) {\n    override = override || {\n      unitsPerEm: 0,\n      yMax: 0,\n      yMin: 0,\n      ascent: 0,\n      descent: 0\n    };\n    var ulUnicodeRange1 = 0;\n    var ulUnicodeRange2 = 0;\n    var ulUnicodeRange3 = 0;\n    var ulUnicodeRange4 = 0;\n    var firstCharIndex = null;\n    var lastCharIndex = 0;\n    if (charstrings) {\n      for (var code in charstrings) {\n        code |= 0;\n        if (firstCharIndex > code || !firstCharIndex) {\n          firstCharIndex = code;\n        }\n        if (lastCharIndex < code) {\n          lastCharIndex = code;\n        }\n        var position = (0, _unicode.getUnicodeRangeFor)(code);\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 _util.FormatError('Unicode ranges Bits > 123 are reserved for internal usage');\n        }\n      }\n    } else {\n      firstCharIndex = 0;\n      lastCharIndex = 255;\n    }\n    var bbox = properties.bbox || [0, 0, 0, 0];\n    var unitsPerEm = override.unitsPerEm || 1 / (properties.fontMatrix || _util.FONT_IDENTITY_MATRIX)[0];\n    var scale = properties.ascentScaled ? 1.0 : unitsPerEm / PDF_GLYPH_SPACE_UNITS;\n    var typoAscent = override.ascent || Math.round(scale * (properties.ascent || bbox[3]));\n    var 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    var winAscent = override.yMax || typoAscent;\n    var 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' + (0, _util.string32)(ulUnicodeRange1) + (0, _util.string32)(ulUnicodeRange2) + (0, _util.string32)(ulUnicodeRange3) + (0, _util.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  }\n  function createPostTable(properties) {\n    var angle = Math.floor(properties.italicAngle * Math.pow(2, 16));\n    return '\\x00\\x03\\x00\\x00' + (0, _util.string32)(angle) + '\\x00\\x00' + '\\x00\\x00' + (0, _util.string32)(properties.fixedPitch) + '\\x00\\x00\\x00\\x00' + '\\x00\\x00\\x00\\x00' + '\\x00\\x00\\x00\\x00' + '\\x00\\x00\\x00\\x00';\n  }\n  function createNameTable(name, proto) {\n    if (!proto) {\n      proto = [[], []];\n    }\n    var 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] || '', proto[0][7] || 'Unknown', proto[0][8] || 'Unknown', proto[0][9] || 'Unknown'];\n    var stringsUnicode = [];\n    var i, ii, j, jj, str;\n    for (i = 0, ii = strings.length; i < ii; i++) {\n      str = proto[1][i] || strings[i];\n      var 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    var names = [strings, stringsUnicode];\n    var platforms = ['\\x00\\x01', '\\x00\\x03'];\n    var encodings = ['\\x00\\x00', '\\x00\\x01'];\n    var languages = ['\\x00\\x00', '\\x04\\x09'];\n    var namesRecordCount = strings.length * platforms.length;\n    var nameTable = '\\x00\\x00' + string16(namesRecordCount) + string16(namesRecordCount * 12 + 6);\n    var strOffset = 0;\n    for (i = 0, ii = platforms.length; i < ii; i++) {\n      var strs = names[i];\n      for (j = 0, jj = strs.length; j < jj; j++) {\n        str = strs[j];\n        var 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  }\n  Font.prototype = {\n    name: null,\n    font: null,\n    mimetype: null,\n    encoding: null,\n    get renderer() {\n      var renderer = _font_renderer.FontRendererFactory.create(this, SEAC_ANALYSIS_ENABLED);\n      return (0, _util.shadow)(this, 'renderer', renderer);\n    },\n    exportData: function Font_exportData() {\n      var data = {};\n      for (var i in this) {\n        if (this.hasOwnProperty(i)) {\n          data[i] = this[i];\n        }\n      }\n      return data;\n    },\n    fallbackToSystemFont: function Font_fallbackToSystemFont() {\n      var _this = this;\n\n      this.missingFile = true;\n      var charCode, unicode;\n      var name = this.name;\n      var type = this.type;\n      var subtype = this.subtype;\n      var fontName = name.replace(/[,_]/g, '-');\n      var stdFontMap = (0, _standard_fonts.getStdFontMap)(),\n          nonStdFontMap = (0, _standard_fonts.getNonStdFontMap)();\n      var isStandardFont = !!stdFontMap[fontName] || !!(nonStdFontMap[fontName] && stdFontMap[nonStdFontMap[fontName]]);\n      fontName = stdFontMap[fontName] || nonStdFontMap[fontName] || fontName;\n      this.bold = fontName.search(/bold/gi) !== -1;\n      this.italic = fontName.search(/oblique/gi) !== -1 || fontName.search(/italic/gi) !== -1;\n      this.black = name.search(/Black/g) !== -1;\n      this.remeasure = Object.keys(this.widths).length > 0;\n      if (isStandardFont && type === 'CIDFontType2' && this.cidEncoding.indexOf('Identity-') === 0) {\n        var GlyphMapForStandardFonts = (0, _standard_fonts.getGlyphMapForStandardFonts)();\n        var map = [];\n        for (charCode in GlyphMapForStandardFonts) {\n          map[+charCode] = GlyphMapForStandardFonts[charCode];\n        }\n        if (/Arial-?Black/i.test(name)) {\n          var SupplementalGlyphMapForArialBlack = (0, _standard_fonts.getSupplementalGlyphMapForArialBlack)();\n          for (charCode in SupplementalGlyphMapForArialBlack) {\n            map[+charCode] = SupplementalGlyphMapForArialBlack[charCode];\n          }\n        } else if (/Calibri/i.test(name)) {\n          var SupplementalGlyphMapForCalibri = (0, _standard_fonts.getSupplementalGlyphMapForCalibri)();\n          for (charCode in SupplementalGlyphMapForCalibri) {\n            map[+charCode] = SupplementalGlyphMapForCalibri[charCode];\n          }\n        }\n        var isIdentityUnicode = this.toUnicode instanceof IdentityToUnicodeMap;\n        if (!isIdentityUnicode) {\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(_encodings.SymbolSetEncoding, (0, _glyphlist.getGlyphsUnicode)(), this.differences);\n      } else if (/Dingbats/i.test(fontName)) {\n        if (/Wingdings/i.test(name)) {\n          (0, _util.warn)('Non-embedded Wingdings font, falling back to ZapfDingbats.');\n        }\n        this.toFontChar = buildToFontChar(_encodings.ZapfDingbatsEncoding, (0, _glyphlist.getDingbatsGlyphsUnicode)(), this.differences);\n      } else if (isStandardFont) {\n        this.toFontChar = buildToFontChar(this.defaultEncoding, (0, _glyphlist.getGlyphsUnicode)(), this.differences);\n      } else {\n        var glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();\n        this.toUnicode.forEach(function (charCode, unicodeCharCode) {\n          if (!_this.composite) {\n            var glyphName = _this.differences[charCode] || _this.defaultEncoding[charCode];\n            unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap);\n            if (unicode !== -1) {\n              unicodeCharCode = unicode;\n            }\n          }\n          _this.toFontChar[charCode] = unicodeCharCode;\n        });\n      }\n      this.loadedName = fontName.split('-')[0];\n      this.loading = false;\n      this.fontType = getFontType(type, subtype);\n    },\n    checkAndRepair: function Font_checkAndRepair(name, font, properties) {\n      var VALID_TABLES = ['OS/2', 'cmap', 'head', 'hhea', 'hmtx', 'maxp', 'name', 'post', 'loca', 'glyf', 'fpgm', 'prep', 'cvt ', 'CFF '];\n      function readTables(file, numTables) {\n        var 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 (var i = 0; i < numTables; i++) {\n          var table = readTableEntry(font);\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        var tag = (0, _util.bytesToString)(file.getBytes(4));\n        var checksum = file.getInt32() >>> 0;\n        var offset = file.getInt32() >>> 0;\n        var length = file.getInt32() >>> 0;\n        var previousPosition = file.pos;\n        file.pos = file.start ? file.start : 0;\n        file.skip(offset);\n        var 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: tag,\n          checksum: checksum,\n          length: length,\n          offset: offset,\n          data: data\n        };\n      }\n      function readOpenTypeHeader(ttf) {\n        return {\n          version: (0, _util.bytesToString)(ttf.getBytes(4)),\n          numTables: ttf.getUint16(),\n          searchRange: ttf.getUint16(),\n          entrySelector: ttf.getUint16(),\n          rangeShift: ttf.getUint16()\n        };\n      }\n      function readTrueTypeCollectionHeader(ttc) {\n        var ttcTag = (0, _util.bytesToString)(ttc.getBytes(4));\n        (0, _util.assert)(ttcTag === 'ttcf', 'Must be a TrueType Collection font.');\n        var majorVersion = ttc.getUint16();\n        var minorVersion = ttc.getUint16();\n        var numFonts = ttc.getInt32() >>> 0;\n        var offsetTable = [];\n        for (var i = 0; i < numFonts; i++) {\n          offsetTable.push(ttc.getInt32() >>> 0);\n        }\n        var header = {\n          ttcTag: ttcTag,\n          majorVersion: majorVersion,\n          minorVersion: minorVersion,\n          numFonts: numFonts,\n          offsetTable: 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 _util.FormatError('Invalid TrueType Collection majorVersion: ' + majorVersion + '.');\n      }\n      function readTrueTypeCollectionData(ttc, fontName) {\n        var _readTrueTypeCollecti = readTrueTypeCollectionHeader(ttc),\n            numFonts = _readTrueTypeCollecti.numFonts,\n            offsetTable = _readTrueTypeCollecti.offsetTable;\n\n        for (var i = 0; i < numFonts; i++) {\n          ttc.pos = (ttc.start || 0) + offsetTable[i];\n          var potentialHeader = readOpenTypeHeader(ttc);\n          var potentialTables = readTables(ttc, potentialHeader.numTables);\n          if (!potentialTables['name']) {\n            throw new _util.FormatError('TrueType Collection font must contain a \"name\" table.');\n          }\n          var nameTable = readNameTable(potentialTables['name']);\n          for (var j = 0, jj = nameTable.length; j < jj; j++) {\n            for (var k = 0, kk = nameTable[j].length; k < kk; k++) {\n              var nameEntry = nameTable[j][k];\n              if (nameEntry && nameEntry.replace(/\\s/g, '') === fontName) {\n                return {\n                  header: potentialHeader,\n                  tables: potentialTables\n                };\n              }\n            }\n          }\n        }\n        throw new _util.FormatError('TrueType Collection does not contain \"' + fontName + '\" font.');\n      }\n      function readCmapTable(cmap, font, isSymbolicFont, hasEncoding) {\n        if (!cmap) {\n          (0, _util.warn)('No cmap table available.');\n          return {\n            platformId: -1,\n            encodingId: -1,\n            mappings: [],\n            hasShortCmap: false\n          };\n        }\n        var segment;\n        var start = (font.start ? font.start : 0) + cmap.offset;\n        font.pos = start;\n        font.getUint16();\n        var numTables = font.getUint16();\n        var potentialTable;\n        var canBreak = false;\n        for (var i = 0; i < numTables; i++) {\n          var platformId = font.getUint16();\n          var encodingId = font.getUint16();\n          var offset = font.getInt32() >>> 0;\n          var useTable = false;\n          if (potentialTable && potentialTable.platformId === platformId && potentialTable.encodingId === encodingId) {\n            continue;\n          }\n          if (platformId === 0 && encodingId === 0) {\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            canBreak = true;\n          }\n          if (useTable) {\n            potentialTable = {\n              platformId: platformId,\n              encodingId: encodingId,\n              offset: offset\n            };\n          }\n          if (canBreak) {\n            break;\n          }\n        }\n        if (potentialTable) {\n          font.pos = start + potentialTable.offset;\n        }\n        if (!potentialTable || font.peekByte() === -1) {\n          (0, _util.warn)('Could not find a preferred cmap table.');\n          return {\n            platformId: -1,\n            encodingId: -1,\n            mappings: [],\n            hasShortCmap: false\n          };\n        }\n        var format = font.getUint16();\n        font.getUint16();\n        font.getUint16();\n        var hasShortCmap = false;\n        var mappings = [];\n        var j, glyphId;\n        if (format === 0) {\n          for (j = 0; j < 256; j++) {\n            var index = font.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 === 4) {\n          var segCount = font.getUint16() >> 1;\n          font.getBytes(6);\n          var segIndex,\n              segments = [];\n          for (segIndex = 0; segIndex < segCount; segIndex++) {\n            segments.push({ end: font.getUint16() });\n          }\n          font.getUint16();\n          for (segIndex = 0; segIndex < segCount; segIndex++) {\n            segments[segIndex].start = font.getUint16();\n          }\n          for (segIndex = 0; segIndex < segCount; segIndex++) {\n            segments[segIndex].delta = font.getUint16();\n          }\n          var offsetsCount = 0;\n          for (segIndex = 0; segIndex < segCount; segIndex++) {\n            segment = segments[segIndex];\n            var rangeOffset = font.getUint16();\n            if (!rangeOffset) {\n              segment.offsetIndex = -1;\n              continue;\n            }\n            var offsetIndex = (rangeOffset >> 1) - (segCount - segIndex);\n            segment.offsetIndex = offsetIndex;\n            offsetsCount = Math.max(offsetsCount, offsetIndex + segment.end - segment.start + 1);\n          }\n          var offsets = [];\n          for (j = 0; j < offsetsCount; j++) {\n            offsets.push(font.getUint16());\n          }\n          for (segIndex = 0; segIndex < segCount; segIndex++) {\n            segment = segments[segIndex];\n            start = segment.start;\n            var end = segment.end;\n            var 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: glyphId\n              });\n            }\n          }\n        } else if (format === 6) {\n          var firstCode = font.getUint16();\n          var entryCount = font.getUint16();\n          for (j = 0; j < entryCount; j++) {\n            glyphId = font.getUint16();\n            var charCode = firstCode + j;\n            mappings.push({\n              charCode: charCode,\n              glyphId: glyphId\n            });\n          }\n        } else {\n          (0, _util.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 (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: mappings,\n          hasShortCmap: hasShortCmap\n        };\n      }\n      function sanitizeMetrics(font, header, metrics, numGlyphs) {\n        if (!header) {\n          if (metrics) {\n            metrics.data = null;\n          }\n          return;\n        }\n        font.pos = (font.start ? font.start : 0) + header.offset;\n        font.pos += header.length - 2;\n        var numOfMetrics = font.getUint16();\n        if (numOfMetrics > numGlyphs) {\n          (0, _util.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        var numOfSidebearings = numGlyphs - numOfMetrics;\n        var numMissing = numOfSidebearings - (metrics.length - numOfMetrics * 4 >> 1);\n        if (numMissing > 0) {\n          var entries = new Uint8Array(metrics.length + numMissing * 2);\n          entries.set(metrics.data);\n          metrics.data = entries;\n        }\n      }\n      function sanitizeGlyph(source, sourceStart, sourceEnd, dest, destStart, hintsValid) {\n        var glyphProfile = {\n          length: 0,\n          sizeOfInstructions: 0\n        };\n        if (sourceEnd - sourceStart <= 12) {\n          return glyphProfile;\n        }\n        var glyf = source.subarray(sourceStart, sourceEnd);\n        var contoursCount = signedInt16(glyf[0], glyf[1]);\n        if (contoursCount < 0) {\n          contoursCount = -1;\n          writeSignedInt16(glyf, 0, contoursCount);\n          dest.set(glyf, destStart);\n          glyphProfile.length = glyf.length;\n          return glyphProfile;\n        }\n        var i,\n            j = 10,\n            flagsCount = 0;\n        for (i = 0; i < contoursCount; i++) {\n          var endPoint = glyf[j] << 8 | glyf[j + 1];\n          flagsCount = endPoint + 1;\n          j += 2;\n        }\n        var instructionsStart = j;\n        var instructionsLength = glyf[j] << 8 | glyf[j + 1];\n        glyphProfile.sizeOfInstructions = instructionsLength;\n        j += 2 + instructionsLength;\n        var instructionsEnd = j;\n        var coordinatesLength = 0;\n        for (i = 0; i < flagsCount; i++) {\n          var flag = glyf[j++];\n          if (flag & 0xC0) {\n            glyf[j - 1] = flag & 0x3F;\n          }\n          var xyLength = (flag & 2 ? 1 : flag & 16 ? 0 : 2) + (flag & 4 ? 1 : flag & 32 ? 0 : 2);\n          coordinatesLength += xyLength;\n          if (flag & 8) {\n            var repeat = glyf[j++];\n            i += repeat;\n            coordinatesLength += repeat * xyLength;\n          }\n        }\n        if (coordinatesLength === 0) {\n          return glyphProfile;\n        }\n        var glyphDataLength = j + coordinatesLength;\n        if (glyphDataLength > glyf.length) {\n          return glyphProfile;\n        }\n        if (!hintsValid && instructionsL\n"
  },
  {
    "path": "public/styles/codemirror.css",
    "content": ".CodeMirror {\n  font-size: 14px;\n  height: 100%;\n  background-color: #2c2c2c;\n}\n\n@media (max-width: 36em) {\n  .CodeMirror {\n    font-size: 12px;\n  }\n}\n\n.CodeMirror-gutters {\n  width: 40px;\n  border: 0px;\n  color: #a6a6a6;\n  font-size: 12px;\n  line-height: 24px;\n  background-color: #3e3e3e;\n  font-family: 'monospace' !important;\n}\n\n.CodeMirror-placeholder {\n  opacity: 0.6;\n  margin-left: 12px !important;\n  position: absolute !important;\n}\n\n.CodeMirror-code {\n  margin-top: 15px !important;\n}\n\n.CodeMirror-line {\n  padding-left: 15px !important;\n}\n\n.CodeMirror-line span[role='presentation'] {\n  color: #e7e7e7;\n}\n\n.CodeMirror-scroll {\n  color: white;\n}\n\n.CodeMirror-cursor {\n  border-color: #a6a6a6;\n  padding-left: 15px !important;\n}\n\n.CodeMirror-activeline-background {\n  background-color: rgba(255, 255, 255, 0.02);\n}\n\n.CodeMirror-matchingbracket {\n  color: #eb606b !important;\n}\n\n.CodeMirror-linenumber {\n  font-size: 14px;\n  line-height: 18px;\n}\n\n.cm-comment {\n  color: rgba(255, 255, 255, 0.2) !important;\n}\n\n.cm-atom {\n  color: #e7e7e7 !important;\n}\n\n.cm-number {\n  color: #e7e7e7 !important;\n}\n\n.cm-property {\n  color: #e7e7e7 !important;\n}\n\n.cm-keyword,\n.cm-attribute {\n  color: #ff6666 !important;\n}\n\n.cm-string,\n.cm-string-2 {\n  color: #7aecd9 !important;\n}\n\n.cm-variable {\n  color: #e7e7e7 !important;\n}\n\n.cm-variable-2 {\n  color: #e7e7e7 !important;\n}\n\n.cm-def {\n  color: #f8f8f8 !important;\n}\n\n.cm-bracket {\n  color: #d6d5d4;\n}\n\n.cm-tag {\n  color: #fac863 !important;\n}\n\n.cm-link {\n  color: #fcd3cc !important;\n}\n\n.cm-error {\n  background: #8d1602 !important;\n  color: #f8f8f8 !important;\n}\n\n.CodeMirror-selected {\n  background: #3e3e3e !important;\n}\n\n.CodeMirror-simplescroll-horizontal div,\n.CodeMirror-simplescroll-vertical div {\n  cursor: pointer;\n  position: absolute;\n  border-radius: 2px;\n  background: #3e3e3e;\n  box-sizing: border-box;\n  -moz-box-sizing: border-box;\n}\n\n.CodeMirror-simplescroll-horizontal,\n.CodeMirror-simplescroll-vertical {\n  position: absolute;\n  z-index: 6;\n  background: rgba(255, 255, 255, 0.3);\n}\n\n.CodeMirror-simplescroll-horizontal {\n  bottom: 0;\n  left: 0;\n  height: 12px;\n}\n.CodeMirror-simplescroll-horizontal div {\n  bottom: 0;\n  height: 100%;\n}\n\n.CodeMirror-simplescroll-vertical {\n  right: 0;\n  top: 0;\n  width: 12px;\n}\n.CodeMirror-simplescroll-vertical div {\n  right: 0;\n  width: 100%;\n}\n\n.CodeMirror-scrollbar-filler {\n  background-color: #737373;\n}\n"
  },
  {
    "path": "public/styles/fonts.css",
    "content": "@font-face {\n\tfont-family: \"Source Sans Pro\";\n  src: url(\"/fonts/SourceSansPro-Regular.ttf\");\n  font-weight: normal;\n  font-style: normal;\n}\n\n@font-face {\n  font-family: 'Taviraj';\n  src: url(\"/fonts/Taviraj-ExtraLight.ttf\");\n  font-weight: 200;\n  font-style: normal;\n}\n\n@font-face {\n  font-family: 'Taviraj';\n  src: url(\"/fonts/Taviraj-Regular.ttf\");\n  font-weight: normal;\n  font-style: normal;\n}\n\n@font-face {\n  font-family: 'Taviraj';\n  src: url(\"/fonts/Taviraj-Medium.ttf\");\n  font-weight: 500;\n  font-style: normal;\n}\n"
  },
  {
    "path": "public/styles/index.css",
    "content": "* {\n  margin: 0px;\n  padding: 0px;\n  box-sizing: border-box;\n}\n\n*::selection {\n  color: #3E3E3E;\n  background: #FCD3CC;\n}\n\nhtml, body, #root  {\n  height: 100%;\n}\n\nbody {\n  overflow-y: auto;\n  font-family: \"Source Sans Pro\";\n  font-size: 18px;\n}\n\n.react-pdf__Page {\n  box-shadow: 0 25px 50px 0 rgba(62, 62, 62, 0.15);\n}\n\n@media(max-width: 1290px) {\n  .react-pdf__Document {\n    transform: scale(0.8);\n  }\n}\n\n@media(max-width: 1050px) {\n  .react-pdf__Document {\n    transform: scale(0.6);\n  }\n}\n\n@media(max-width: 992px) {\n  .react-pdf__Document {\n    transform: scale(1);\n  }\n}\n"
  },
  {
    "path": "public/styles/prism.css",
    "content": "/**\n * prism.js default theme for JavaScript, CSS and HTML\n * Based on dabblet (http://dabblet.com)\n * @author Lea Verou\n */\n\ncode[class*=\"language-\"] {\n\tfont-family: monospace;\n\ttext-align: left;\n\twhite-space: pre;\n\tword-spacing: normal;\n\tword-break: normal;\n\tword-wrap: normal;\n\tline-height: 1.5;\n\n  display: block;\n  background-color: initial;\n\n\t-moz-tab-size: 4;\n\t-o-tab-size: 4;\n\ttab-size: 4;\n\n\t-webkit-hyphens: none;\n\t-moz-hyphens: none;\n\t-ms-hyphens: none;\n\thyphens: none;\n}\n\npre[class*=\"language-\"]::-moz-selection, pre[class*=\"language-\"] ::-moz-selection,\ncode[class*=\"language-\"]::-moz-selection, code[class*=\"language-\"] ::-moz-selection {\n\ttext-shadow: none;\n\tbackground: #b3d4fc;\n}\n\npre[class*=\"language-\"]::selection, pre[class*=\"language-\"] ::selection,\ncode[class*=\"language-\"]::selection, code[class*=\"language-\"] ::selection {\n\ttext-shadow: none;\n\tbackground: #b3d4fc;\n}\n\n@media print {\n\tcode[class*=\"language-\"],\n\tpre[class*=\"language-\"] {\n\t\ttext-shadow: none;\n\t}\n}\n\n/* Code blocks */\npre[class*=\"language-\"] {\n\toverflow: auto;\n}\n\n:not(pre) > code[class*=\"language-\"],\npre[class*=\"language-\"] {\n\tbackground: #3E3E3E;\n}\n\n/* Inline code */\n:not(pre) > code[class*=\"language-\"] {\n\tborder-radius: .3em;\n\twhite-space: normal;\n}\n\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n\tcolor: #7a7a7a;\n}\n\n.token.punctuation {\n\tcolor: #9f68c4;\n}\n\n.token.tag ,\n.token.tag .token.punctuation{\n\tcolor: #e7e7e7;\n}\n\n.token.tag .token.attr-value,\n.token.tag .token.attr-value .token.punctuation {\n\tcolor: #7AECD9;\n}\n\n.token.tag .token.attr-value .token.punctuation:first-child {\n\tcolor: #e7e7e7;\n}\n\n.token.script,\n.token.script .token.punctuation {\n\tcolor: #e7e7e7 !important;\n}\n\n.namespace {\n\topacity: .7;\n}\n\n.token.property,\n.token.boolean,\n.token.number,\n.token.constant,\n.token.symbol,\n.token.deleted {\n\tcolor: #CDD3DE;\n}\n\n.token.selector,\n.token.attr-name,\n.token.string,\n.token.char,\n.token.builtin,\n.token.inserted {\n\tcolor: #7AECD9;\n}\n\n.token.entity,\n.token.function-variable {\n\tcolor: #72B2FF;\n}\n\n.token.operator,\n.token.url,\n.language-css .token.string,\n.style .token.string {\n\tcolor: #CDD3DE;\n}\n\n.token.atrule,\n.token.attr-value,\n.token.tag .token.attr-name,\n.token.keyword {\n\tcolor: #FF6666;\n}\n\n.token.class-name {\n\tcolor: #CDD3DE;\n}\n\n.token.regex,\n.token.important,\n.token.variable {\n\tcolor: #F99157;\n}\n\n.token.important,\n.token.bold {\n\tfont-weight: bold;\n}\n.token.italic {\n\tfont-style: italic;\n}\n\n.token.entity {\n\tcursor: help;\n}\n"
  },
  {
    "path": "public/styles/tooltips.css",
    "content": ".tippy-popper {\n  top: -3px !important;\n  left: -6px !important;\n}\n\n.tippy-tooltip {\n  color: #8D1602;\n  background-color: #FCD3CC;\n}\n\n.arrow-regular {\n  border-top-color: #FCD3CC !important;\n}\n"
  },
  {
    "path": "src/components/Docs/DebugSample/DebugSample.js",
    "content": "import React from 'react';\nimport styled from '@emotion/styled';\n\nimport media from '../../../styled/media';\n\nconst CONTENT_COLOR = '#d1e3f3';\nconst PADDING_COLOR = '#e2efdd';\nconst MARGIN_COLOR = '#fce6d0';\n\nconst Wrapper = styled.div`\n  display: flex;\n  margin: 56px 0px;\n  align-items: center;\n  justify-content: center;\n\n  ${media.phone} {\n    flex-direction: column;\n  }\n`;\n\nconst Margin = styled.div`\n  position: relative;\n  border: 30px solid ${MARGIN_COLOR};\n\n  &:after {\n    top: -48px;\n    left: -30px;\n    content: '460x370';\n    position: absolute;\n    font-size: 10px;\n    display: block;\n  }\n\n  ${media.phone} {\n    width: 100%;\n  }\n`;\n\nconst Padding = styled.div`\n  width: 400px;\n  height: 250px;\n  background: ${CONTENT_COLOR};\n  border-top: 30px solid ${PADDING_COLOR};\n  border-bottom: 30px solid ${PADDING_COLOR};\n\n  ${media.phone} {\n    width: 100%;\n    height: 200px;\n  }\n`;\n\nconst Glossary = styled.div`\n  display: flex;\n  width: 200px;\n  margin-left: 40px;\n  flex-direction: column;\n\n  ${media.phone} {\n    width: auto;\n    margin-top: 40px;\n    margin-left: 0px;\n    flex-direction: row;\n  }\n`;\n\nconst ColoredBox = styled.div`\n  width: 20px;\n  height: 20px;\n  margin-right: 8px;\n  background: ${(props) => props.color};\n`;\n\nconst ItemWrapper = styled.div`\n  display: flex;\n  margin-bottom: 8px;\n  align-items: center;\n\n  ${media.phone} {\n    margin-left: 8px;\n  }\n`;\n\nconst Item = ({ color, children }) => (\n  <ItemWrapper>\n    <ColoredBox color={color} />\n    <span>{children}</span>\n  </ItemWrapper>\n);\n\nconst DebugSample = () => (\n  <Wrapper>\n    <Margin>\n      <Padding />\n    </Margin>\n    <Glossary>\n      <Item color={CONTENT_COLOR}>Content</Item>\n      <Item color={PADDING_COLOR}>Padding</Item>\n      <Item color={MARGIN_COLOR}>Margin</Item>\n    </Glossary>\n  </Wrapper>\n);\n\nexport default DebugSample;\n"
  },
  {
    "path": "src/components/Docs/DebugSample/index.js",
    "content": "import DebugSample from './DebugSample';\n\nexport default DebugSample;\n"
  },
  {
    "path": "src/components/Docs/EditButton/EditButton.js",
    "content": "import React from 'react';\nimport styled from '@emotion/styled';\n\nimport Button from '../../UI/Button';\nimport media from '../../../styled/media';\n\nconst Wrapper = styled.div`\n  display: flex;\n  position: initial;\n  margin-bottom: 1em;\n  text-decoration: none;\n  justify-content: flex-end;\n\n  ${media.phone} {\n    display: none;\n  }\n`;\n\nconst EditButton = ({ to }) => (\n  <Wrapper>\n    <Button href={to} target=\"_blank\" terciary=\"true\">\n      Edit\n    </Button>\n  </Wrapper>\n);\n\nexport default EditButton;\n"
  },
  {
    "path": "src/components/Docs/EditButton/index.js",
    "content": "import EditButton from './EditButton';\n\nexport default EditButton;\n"
  },
  {
    "path": "src/components/Docs/GoToExample/GoToExample.js",
    "content": "import React from 'react';\nimport Link from 'next/link';\nimport styled from '@emotion/styled';\n\nimport Button from '../../UI/Button';\n\nconst Wrapper = styled.div`\n  flex: 1;\n  display: flex;\n  margin: 32px 0px;\n  text-decoration: none;\n  justify-content: flex-end;\n`;\n\nconst GoToExample = ({ name }) => (\n  <Link href={`/repl?example=${name}`} legacyBehavior>\n    <Wrapper>\n      <Button primary=\"true\">See it in action →</Button>\n    </Wrapper>\n  </Link>\n);\n\nexport default GoToExample;\n"
  },
  {
    "path": "src/components/Docs/GoToExample/index.js",
    "content": "import GoToExample from './GoToExample';\n\nexport default GoToExample;\n"
  },
  {
    "path": "src/components/Docs/NavigationButtons/NavigationButtons.js",
    "content": "import React from 'react';\nimport Link from 'next/link';\nimport styled from '@emotion/styled';\n\nimport Button from '../../UI/Button';\nimport media from '../../../styled/media';\n\nconst Wrapper = styled.div`\n  display: flex;\n  margin-top: 60px;\n  padding: 0px 2px 2px 2px;\n\n  ${media.phone} {\n    margin-top: 45px;\n  }\n`;\n\nconst Cell = styled.div`\n  flex: 1;\n  text-align: ${(props) => props.align};\n`;\n\nconst NavigationButtons = ({ backSrc, backText, nextSrc, nextText }) => (\n  <Wrapper>\n    <Cell align=\"left\">\n      {backSrc && (\n        <Link href={backSrc} legacyBehavior>\n          <Button primary=\"true\">{`← ${backText}`}</Button>\n        </Link>\n      )}\n    </Cell>\n    <Cell align=\"right\">\n      {nextSrc && (\n        <Link href={nextSrc} legacyBehavior>\n          <Button primary=\"true\">{`${nextText} →`}</Button>\n        </Link>\n      )}\n    </Cell>\n  </Wrapper>\n);\n\nNavigationButtons.defaultProps = {\n  backSrc: null,\n  backText: null,\n  nextSrc: null,\n  nextText: null,\n};\n\nexport default NavigationButtons;\n"
  },
  {
    "path": "src/components/Docs/NavigationButtons/index.js",
    "content": "import NavigationButtons from './NavigationButtons';\n\nexport default NavigationButtons;\n"
  },
  {
    "path": "src/components/Docs/OverviewTimeline/OverviewTimeline.js",
    "content": "import React from 'react';\nimport styled from '@emotion/styled';\n\nimport Icon from '../../UI/Icon';\nimport media from '../../../styled/media';\n\nconst List = styled.ol`\n  height: 4px;\n  display: flex;\n  position: relative;\n  margin: 184px 0px;\n  list-style: none;\n  background: ${({ theme }) => theme.black};\n\n  &:before {\n    content: '';\n    right: -4px;\n    border: 10px solid transparent;\n    border-radius: 3px;\n    border-right: 0;\n    border-left: ${({ theme }) => `20px solid ${theme.black}`};\n    position: absolute;\n    top: -8px;\n    width: 0;\n    height: 0;\n    display: block;\n  }\n\n  ${media.tablet} {\n    padding: 0px 20px;\n  }\n`;\n\nconst ItemWrapper = styled.li`\n  flex: 1;\n  float: left;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  position: relative;\n\n  &:before {\n    width: 0px;\n    content: '';\n    height: 60px;\n    display: block;\n    position: absolute;\n    border: ${({ theme }) => `1px dashed ${theme.black}`};\n    top: ${(props) => (props.position === 'bottom' ? '20px' : null)};\n    bottom: ${(props) => (props.position === 'top' ? '20px' : null)};\n\n    ${media.phone} {\n      height: 50px;\n    }\n  }\n`;\n\nconst ItemIcon = styled.div`\n  width: 45px;\n  height: 45px;\n  color: white;\n  z-index: 100;\n  display: flex;\n  border-radius: 50%;\n  align-items: center;\n  justify-content: center;\n  background: ${({ theme }) => theme.red};\n\n  ${media.phone} {\n    width: 32px;\n    height: 32px;\n  }\n`;\n\nconst ItemDescription = styled.p`\n  width: 125%;\n  padding: 8px;\n  position: absolute;\n  text-align: center;\n  border-radius: 6px;\n  color: white;\n  background: ${({ theme }) => theme.black};\n  top: ${(props) => (props.position === 'bottom' ? '60px' : null)};\n  bottom: ${(props) => (props.position === 'top' ? '60px' : null)};\n\n  ${media.tablet} {\n    width: 150%;\n    font-size: 15px;\n  }\n\n  ${media.phone} {\n    width: 175%;\n    font-size: 12px;\n    top: ${(props) => (props.position === 'bottom' ? '50px' : null)};\n    bottom: ${(props) => (props.position === 'top' ? '50px' : null)};\n  }\n`;\n\nconst TimelineItem = ({ icon, iconLabel, position, children }) => (\n  <ItemWrapper position={position}>\n    <ItemDescription position={position}>{children}</ItemDescription>\n    <ItemIcon>\n      <Icon size={16} type={icon} label={iconLabel} />\n    </ItemIcon>\n  </ItemWrapper>\n);\n\nconst OverviewTimeline = () => (\n  <List>\n    <TimelineItem position=\"top\" icon=\"cogs\" iconLabel=\"\">\n      Internal structures creation\n    </TimelineItem>\n    <TimelineItem position=\"bottom\" icon=\"border-style\" iconLabel=\"\">\n      Resolve styles\n    </TimelineItem>\n    <TimelineItem position=\"top\" icon=\"download\" iconLabel=\"\">\n      Fetching assets\n    </TimelineItem>\n    <TimelineItem position=\"bottom\" icon=\"paragraph\" iconLabel=\"\">\n      Layout text\n    </TimelineItem>\n    <TimelineItem position=\"top\" icon=\"copy\" iconLabel=\"\">\n      Wrapping pages\n    </TimelineItem>\n    <TimelineItem position=\"bottom\" icon=\"paint-brush\" iconLabel=\"\">\n      Rendering\n    </TimelineItem>\n  </List>\n);\n\nexport default OverviewTimeline;\n"
  },
  {
    "path": "src/components/Docs/OverviewTimeline/index.js",
    "content": "import OverviewTimeline from './OverviewTimeline';\n\nexport default OverviewTimeline;\n"
  },
  {
    "path": "src/components/Layout/GitHubIcon.js",
    "content": "import React from 'react';\nimport styled from '@emotion/styled';\n\nimport Icon from '../UI/Icon';\n\nconst GitHubIcon = styled(({ size, className }) => (\n  <a\n    target=\"_blank\"\n    rel=\"noopener noreferrer\"\n    href=\"https://github.com/diegomura/react-pdf\"\n    className={className}\n  >\n    <Icon type=\"github\" label=\"GitHub Repo\" size={size || 30} />\n  </a>\n))`\n  color: black;\n  opacity: 0.3;\n  margin-bottom: 36px;\n  text-decoration: none;\n`;\n\nexport default GitHubIcon;\n"
  },
  {
    "path": "src/components/Layout/Header.js",
    "content": "import React from 'react';\nimport Link from 'next/link';\nimport styled from '@emotion/styled';\nimport { withRouter } from 'next/router';\n\nimport Logo from '../UI/Logo';\nimport Icon from '../UI/Icon';\nimport media from '../../styled/media';\n\nconst Wrapper = styled.header`\n  top: 0;\n  width: 100%;\n  height: 60px;\n  z-index: 300;\n  display: none;\n  padding: 0 1em;\n  align-items: center;\n  justify-content: space-between;\n\n  ${media.tablet} {\n    display: flex;\n  }\n`;\n\nconst HeaderIcon = styled(Icon)`\n  color: ${({ theme }) => theme.gray1};\n`;\n\nconst HeaderLogo = styled(Logo)`\n  padding: 0px;\n  display: none;\n\n  ${media.tablet} {\n    display: inherit;\n  }\n`;\n\nconst Header = ({ router, onMenuClick }) => (\n  <Wrapper>\n    <HeaderIcon\n      type=\"menu\"\n      label=\"Menu\"\n      size={25}\n      onClick={() => {\n        onMenuClick();\n      }}\n    />\n    {router.pathname !== '/' && (\n      <Link href=\"/\" legacyBehavior>\n        <HeaderLogo\n          withText\n          size=\"28px\"\n          fontSize=\"18px\"\n          separation=\"10px\"\n          rotate={false}\n        />\n      </Link>\n    )}\n    <HeaderIcon type=\"github\" label=\"GitHub Repo\" size={25} />\n  </Wrapper>\n);\n\nexport default withRouter(Header);\n"
  },
  {
    "path": "src/components/Layout/Layout.js",
    "content": "import React, { useState } from 'react';\nimport styled from '@emotion/styled';\n\nimport Menu from './Menu';\nimport Header from './Header';\nimport Icon from '../UI/Icon';\nimport Link from '../UI/Link';\nimport media from '../../styled/media';\n\nconst Section = styled.section`\n  flex: 1;\n  width: 100%;\n  margin: 0 auto;\n  padding: 110px;\n  max-width: 1100px;\n  overflow-y: ${(props) => props.menuOpened && 'hidden'};\n\n  ${media.tablet} {\n    padding: 4em;\n  }\n\n  ${media.phone} {\n    padding: 1.5em;\n    padding-bottom: 3em;\n  }\n`;\n\nconst Main = styled.main`\n  display: flex;\n  min-height: 100%;\n  margin-left: 240px;\n\n  ${media.tablet} {\n    margin: 0px;\n  }\n`;\n\nconst Content = styled.div`\n  position: relative;\n`;\n\nconst CornerGraphicsImage = styled.img`\n  top: 0;\n  right: 0;\n  width: 15%;\n  position: absolute;\n  pointer-events: none;\n\n  ${media.phone} {\n    display: none;\n  }\n`;\n\nconst Frame = ({ children }) => {\n  const [menuOpen, setMenuOpen] = useState(false);\n\n  return (\n    <>\n      <Header onMenuClick={() => setMenuOpen(!menuOpen)} />\n\n      <Main>\n        <Menu opened={menuOpen} />\n        <Section menuOpened={menuOpen} onClick={() => setMenuOpen(false)}>\n          <Content>{children}</Content>\n        </Section>\n\n        <CornerGraphicsImage src=\"/images/corner-graphics.png\" />\n      </Main>\n    </>\n  );\n};\n\nexport default Frame;\n"
  },
  {
    "path": "src/components/Layout/Menu.js",
    "content": "import React from 'react';\nimport Link from 'next/link';\nimport styled from '@emotion/styled';\nimport { withRouter } from 'next/router';\n\nimport Logo from '../UI/Logo';\nimport GitHubIcon from './GitHubIcon';\nimport media from '../../styled/media';\nimport VersionPicker from './VersionPicker';\n\nconst Nav = styled.nav`\n  left: 0;\n  top: 0px;\n  z-index: 500;\n  height: 100%;\n  display: flex;\n  position: fixed;\n  align-items: center;\n  transition: all 0.5s;\n  flex-direction: column;\n  width: ${(props) => props.width || '285px'};\n  min-width: ${(props) => props.width || '285px'};\n  background-color: ${({ theme }) => theme.gray3};\n\n  ${media.tablet} {\n    left: ${(props) => (props.opened ? '0px' : '-285px')};\n    box-shadow: 0 0 15px rgba(0, 0, 0, 0.2);\n  }\n`;\n\nconst Bar = styled.div`\n  width: 100%;\n  height: 64px;\n  color: white;\n  border: none;\n  padding: 20px;\n  outline: none;\n  font-size: 16px;\n  line-height: 24px;\n  box-sizing: border-box;\n  background-color: ${({ theme }) => theme.black};\n`;\n\nconst MenuLink = styled.a`\n  font-size: 16px;\n  cursor: pointer;\n  line-height: 24px;\n  padding: 4px 10px;\n  position: relative;\n  text-decoration: none;\n  color: ${({ active, theme }) => (active ? theme.black : theme.gray1)};\n\n  &:before {\n    top: 0px;\n    left: 0px;\n    content: '';\n    width: 2px;\n    height: 32px;\n    position: absolute;\n    background: ${(props) => props.active && '#f01e00'};\n  }\n`;\n\nconst List = styled.ul`\n  flex: 1;\n  margin: 0px;\n  width: 100%;\n  overflow: auto;\n  list-style: none;\n\n  ${media.phone} {\n    margin: 35px 0px;\n  } ;\n`;\n\nconst SubItems = styled.ul`\n  overflow: hidden;\n  list-style: none;\n  height: ${(props) => (props.active ? 'inherit' : '0px')};\n`;\n\nconst ItemWrapper = styled.li`\n  display: flex;\n  margin: 4px 0px;\n  padding: 0px 18px;\n  flex-direction: column;\n\n  a {\n    text-decoration: none;\n  }\n`;\n\nconst Item = withRouter(({ router, to, title, children, ...props }) => {\n  const isAbsoluteUrl = /https?/.test(to);\n  const active = router && router.pathname === to;\n\n  return (\n    <ItemWrapper>\n      {isAbsoluteUrl && (\n        <MenuLink href={to} target=\"_blank\" {...props} active={active}>{title}</MenuLink>\n      )}\n\n      {!isAbsoluteUrl && (\n        <Link href={to} {...props} legacyBehavior>\n          <MenuLink href={to} active={active}>{title}</MenuLink>\n        </Link>\n      )}\n      {children && <SubItems active={active}>{children}</SubItems>}\n    </ItemWrapper>\n  );\n});\n\nconst MenuLogo = styled(Logo)`\n  ${media.phone} {\n    display: none;\n  }\n`;\n\nconst Menu = ({ opened }) => (\n  <Nav opened={opened}>\n    <Bar />\n    <MenuLogo rotate />\n    <VersionPicker />\n    <List>\n      <Item to=\"/\" title=\"Quick start guide\" />\n\n      <Item to=\"/compatibility\" title=\"Compatibility\" />\n\n      <Item to=\"/rendering-process\" title=\"Rendering process\" />\n\n      <Item to=\"/components\" title=\"Components\">\n        <Item to=\"/components#document\" title=\"Document\" />\n        <Item to=\"/components#page\" title=\"Page\" />\n        <Item to=\"/components#view\" title=\"View\" />\n        <Item to=\"/components#image\" title=\"Image\" />\n        <Item to=\"/components#imagebackground\" title=\"ImageBackground\" />\n        <Item to=\"/components#text\" title=\"Text\" />\n        <Item to=\"/components#link\" title=\"Link\" />\n        <Item to=\"/components#note\" title=\"Note\" />\n        <Item to=\"/components#canvas\" title=\"Canvas\" />\n        <Item to=\"/components#pdfviewer\" title=\"PDFViewer\" />\n        <Item to=\"/components#pdfdownloadlink\" title=\"PDFDownloadLink\" />\n        <Item to=\"/components#blobprovider\" title=\"BlobProvider\" />\n      </Item>\n\n      <Item to=\"/svg\" title=\"SVG Images\">\n        <Item to=\"/svg#svg\" title=\"Svg\" />\n        <Item to=\"/svg#line\" title=\"Line\" />\n        <Item to=\"/svg#polyline\" title=\"Polyline\" />\n        <Item to=\"/svg#polygon\" title=\"Polygon\" />\n        <Item to=\"/svg#path\" title=\"Path\" />\n        <Item to=\"/svg#rect\" title=\"Rect\" />\n        <Item to=\"/svg#circle\" title=\"Circle\" />\n        <Item to=\"/svg#ellipse\" title=\"Ellipse\" />\n        <Item to=\"/svg#text\" title=\"Text\" />\n        <Item to=\"/svg#tspan\" title=\"Tspan\" />\n        <Item to=\"/svg#g\" title=\"G\" />\n        <Item to=\"/svg#stop\" title=\"Stop\" />\n        <Item to=\"/svg#defs\" title=\"Defs\" />\n        <Item to=\"/svg#clippath\" title=\"ClipPath\" />\n        <Item to=\"/svg#lineargradient\" title=\"LinearGradient\" />\n        <Item to=\"/svg#radialgradient\" title=\"RadialGradient\" />\n      </Item>\n\n      <Item to=\"/form\" title=\"Forms\">\n      <Item to=\"/form#textinput\" title=\"TextInput\" />\n        <Item to=\"/form#checkbox\" title=\"Checkbox\" />\n        <Item to=\"/form#select\" title=\"Select\" />\n        <Item to=\"/form#list\" title=\"List\" />\n        <Item to=\"/form#fieldset\" title=\"FieldSet\" />\n      </Item>\n\n      <Item to=\"/hooks\" title=\"Hooks\" />\n\n      <Item to=\"/styling\" title=\"Styling\">\n        <Item to=\"/styling#stylesheet-api\" title=\"StyleSheet API\" />\n        <Item to=\"/styling#media-queries\" title=\"Media queries\" />\n        <Item to=\"/styling#valid-units\" title=\"Valid units\" />\n        <Item to=\"/styling#valid-css-properties\" title=\"Valid CSS properties\" />\n      </Item>\n\n      <Item to=\"/fonts\" title=\"Fonts\">\n        <Item to=\"/fonts#register\" title=\"register\" />\n        <Item\n          to=\"/fonts#registerhyphenationcallback\"\n          title=\"registerHyphenationCallback\"\n        />\n        <Item to=\"/fonts#registeremojisource\" title=\"registerEmojiSource\" />\n      </Item>\n\n      <Item to=\"/node\" title=\"Node API\">\n        <Item to=\"/node#rendertofile\" title=\"renderToFile\" />\n        <Item to=\"/node#rendertobuffer\" title=\"renderToBuffer\" />\n        <Item to=\"/node#rendertostring\" title=\"renderToString\" />\n        <Item to=\"/node#rendertostream\" title=\"renderToStream\" />\n      </Item>\n\n      <Item to=\"/advanced\" title=\"Advanced\">\n        <Item to=\"/advanced#page-wrapping\" title=\"Page wrapping\" />\n        <Item to=\"/advanced#document-navigation\" title=\"Document Navigation\" />\n        <Item\n          to=\"/advanced#on-the-fly-rendering\"\n          title=\"On the fly rendering\"\n        />\n        <Item\n          to=\"/advanced#orphan-&-widow-protection\"\n          title=\"Orphan and widow protection\"\n        />\n        <Item to=\"/advanced#dynamic-content\" title=\"Dynamic content\" />\n        <Item to=\"/advanced#debugging\" title=\"Debugging\" />\n        <Item to=\"/advanced#hyphenation\" title=\"Hyphenation\" />\n        <Item to=\"/advanced#usage-with-express.js\" title=\"Usage with Express.js\" />\n        <Item to=\"/advanced#rendering-large-documents-in-the-browser\" title=\"Rendering large documents\" />\n        <Item to=\"/advanced#math-expressions\" title=\"Math expressions\" />\n      </Item>\n\n      <Item to=\"/repl\" title=\"Playground / REPL\" />\n\n      <Item to=\"https://opencollective.com/react-pdf\" title=\"Donate\" />\n    </List>\n\n    <GitHubIcon />\n  </Nav>\n);\n\nexport default Menu;\n"
  },
  {
    "path": "src/components/Layout/VersionPicker.js",
    "content": "import React from 'react';\nimport styled from '@emotion/styled';\nimport { useToggle } from 'react-use';\n\nimport Icon from '../UI/Icon';\nimport media from '../../styled/media';\n\nconst Wrapper = styled.div`\n  font-size: 16px;\n  margin-left: 18px;\n  position: relative;\n  margin-bottom: 20px;\n  align-self: flex-start;\n\n  ${media.tablet} {\n    margin-top: 30px;\n    margin-bottom: 0px;\n  }\n`;\n\nconst Button = styled.div`\n  cursor: pointer;\n  line-height: 24px;\n  white-space: nowrap;\n  text-decoration: none;\n  padding: 4px 10px 4px 16px;\n  font-family: 'Source Sans Pro';\n  color: ${(props) => props.theme.gray1};\n  transition: color 0.2s, background 0.2s;\n  outline: 1px solid ${(props) => props.theme.gray1};\n\n  &:hover {\n    outline-width: 2px;\n  }\n\n  span {\n    margin-right: 10px;\n  }\n`;\n\nconst Chevron = styled(Icon)`\n  transition: 0.1s linear all;\n  transform: ${props => `rotate(${props.open ? 180 : 0}deg)`};\n`;\n\nconst Popup = styled.div`\n  top: 40px;\n  left: 0;\n  width: 200px;\n  z-index: 1000;\n  position: absolute;\n  background-color: white;\n  border: 1px solid ${(props) => props.theme.gray1};\n  display: ${props => props.open ? 'visible' : 'none'};\n\n  > div {\n    cursor: pointer;\n    padding: 10px 16px;\n    background-color: white;\n    transition: 0.2s linear all;\n\n    &:hover {\n      background-color: ${({ theme }) => theme.gray3};\n    }\n  }\n`;\n\nconst VersionPicker = ({ selected = 'v4' }) => {\n  const [menuOpen, toggleMenu] = useToggle(false);\n\n  const onItemClick = (v) => {\n    const hostname = location.hostname.replace(/^(v\\d\\.)/, '')\n    const subdomain = v === 'v4' ? '' : `${v}.` ;\n    const url = `${location.protocol}//${subdomain}${hostname}:${location.port}${location.pathname}`;\n\n    window.location.replace(url);\n  }\n\n  return (\n    <Wrapper>\n      <Button onClick={toggleMenu}>\n        <span>{selected}</span>\n        <Chevron type=\"chevron-down\" open={menuOpen} />\n      </Button>\n\n      <Popup open={menuOpen} onMouseLeave={toggleMenu}>\n        <div onClick={() => onItemClick('v1')}>v1</div>\n        <div onClick={() => onItemClick('v2')}>v2</div>\n        <div onClick={() => onItemClick('v3')}>v3</div>\n        <div onClick={() => onItemClick('v4')}>v4</div>\n      </Popup>\n    </Wrapper>\n  );\n};\n\nexport default VersionPicker;\n"
  },
  {
    "path": "src/components/Layout/index.js",
    "content": "import Layout from './Layout';\n\nexport default Layout;\n"
  },
  {
    "path": "src/components/Repl/BackButton.js",
    "content": "import React from 'react';\nimport Router from 'next/router';\n\nconst onBackClick = () => {\n  const lastPage = document.referrer || '';\n  const currentHost = window.location.host;\n\n  if (lastPage.includes(currentHost)) {\n    Router.back();\n  } else {\n    Router.push('/');\n  }\n};\n\nconst BackButton = ({ className, children }) => (\n  <button className={className} onClick={onBackClick}>\n    {children}\n  </button>\n);\n\nexport default BackButton;\n"
  },
  {
    "path": "src/components/Repl/Catch.js",
    "content": "import React, { Children } from 'react';\n\nclass Catch extends React.Component {\n  state = {\n    error: undefined,\n  };\n\n  static getDerivedStateFromError(error) {\n    return { error };\n  }\n\n  componentDidCatch(error, info) {\n    if (errorHandler) {\n      errorHandler(error, info);\n    }\n  }\n\n  render() {\n    return this.props.children(this.state.error);\n  }\n};\n\nexport default Catch;\n"
  },
  {
    "path": "src/components/Repl/CodeEditor.js",
    "content": "import React, { useRef, useEffect } from 'react';\n\nlet CodeMirror;\n\nconst DEFAULT_CODE_MIRROR_OPTIONS = {\n  autoCloseBrackets: true,\n  styleSelectedText: true,\n  scrollbarStyle: 'simple',\n  keyMap: 'sublime',\n  lineNumbers: true,\n  matchBrackets: true,\n  mode: 'text/jsx',\n  showCursorWhenSelecting: true,\n  styleActiveLine: true,\n  tabWidth: 2,\n  autoCloseTags: true,\n};\n\nconst CodeEditor = ({ value, onLoad, onChange }) => {\n  const textarea = useRef(null);\n\n  const codeMirror = useRef(null);\n\n  const changeHandler = useRef(onChange);\n\n  useEffect(() => {\n    require('codemirror/mode/jsx/jsx');\n    require('codemirror/keymap/sublime');\n    require('codemirror/addon/edit/closetag');\n    require('codemirror/addon/comment/comment');\n    require('codemirror/addon/edit/matchbrackets');\n    require('codemirror/addon/edit/closebrackets');\n    require('codemirror/addon/display/placeholder');\n    require('codemirror/addon/selection/active-line');\n    require('codemirror/addon/scroll/simplescrollbars');\n    require('codemirror/addon/selection/mark-selection');\n    CodeMirror = require('codemirror');\n\n    const instance = CodeMirror.fromTextArea(\n      textarea.current,\n      DEFAULT_CODE_MIRROR_OPTIONS,\n    );\n\n    instance.setValue(value);\n\n    codeMirror.current = instance;\n\n    instance.on('change', ({ doc }) => {\n      const code = doc.getValue();\n      changeHandler.current?.(code);\n    });\n\n    onLoad?.()\n\n    return () => instance?.toTextArea();\n  }, []);\n\n  useEffect(() => {\n    changeHandler.current = onChange;\n  }, [onChange]);\n\n  return (\n    <textarea\n      autoFocus\n      ref={textarea}\n      autoComplete=\"off\"\n      defaultValue={value}\n      placeholder=\"Write code here...\"\n    />\n  );\n};\n\nexport default CodeEditor;\n"
  },
  {
    "path": "src/components/Repl/ErrorMessage.js",
    "content": "import React from 'react';\nimport styled from '@emotion/styled';\n\nimport Icon from '../UI/Icon';\n\nconst Wrapper = styled.div`\n  color: white;\n  display: flex;\n  padding: 15px 30px;\n  align-items: center;\n  box-sizing: border-box;\n  justify-content: space-between;\n  background: ${({ theme }) => theme.red};\n`;\n\nconst Message = styled.p`\n  margin: 0;\n`;\n\nconst Close = styled(Icon)`\n  cursor: pointer;\n`;\n\nconst ErrorMessage = ({ className, children, onClose }) => {\n  if (!children || !children.length === 0) return null;\n\n  return (\n    <Wrapper className={className}>\n      <Message>{`Error: ${children}`}</Message>\n      <Close type=\"times\" onClick={onClose} />\n    </Wrapper>\n  );\n};\n\nexport default ErrorMessage;\n"
  },
  {
    "path": "src/components/Repl/PDFViewer.js",
    "content": "import styled from '@emotion/styled';\nimport React, { useEffect, useState } from 'react';\nimport { pdf } from '@react-pdf/renderer';\nimport { pdfjs, Document, Page } from 'react-pdf';\n\nimport PageNavigator from './PageNavigator';\nimport { useAsync } from 'react-use';\n\npdfjs.GlobalWorkerOptions.workerSrc = new URL(\n  'pdfjs-dist/build/pdf.worker.min.mjs',\n  import.meta.url,\n).toString();\n\nconst Wrapper = styled.div`\n  flex: 1;\n  height: 100%;\n  display: flex;\n  position: relative;\n  flex-direction: column;\n`;\n\nconst DocumentWrapper = styled.div`\n  flex: 1;\n  padding: 1em;\n  display: flex;\n  z-index: 500;\n  align-items: center;\n  justify-content: center;\n\n  .react-pdf__Document {\n    &.previous-document {\n      canvas {\n        opacity: 0.5;\n      }\n    }\n\n    &.rendering-document {\n      position: absolute;\n\n      .react-pdf__Page {\n        box-shadow: none;\n      }\n    }\n  }\n`;\n\nconst Message = styled.div`\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  display: flex;\n  z-index: 1000;\n  position: absolute;\n  align-items: center;\n  justify-content: center;\n  background-color: #fff;\n  transition: all 1s;\n  opacity: ${(props) => (props.active ? 1 : 0)};\n  pointer-events: ${(props) => (props.active ? 'all' : 'none')};\n`;\n\nconst PDFViewer = ({ value, onUrlChange, onRenderError }) => {\n  const [numPages, setNumPages] = useState(null);\n\n  const [currentPage, setCurrentPage] = useState(1);\n\n  const [previousRenderValue, setPreviousRenderValue] = useState(null);\n\n  const render = useAsync(async () => {\n    if (!value) return null;\n\n    const blob = await pdf(value).toBlob();\n    const url = URL.createObjectURL(blob);\n\n    return url;\n  }, [value]);\n\n  useEffect(() => onUrlChange(render.value), [render.value]);\n\n  useEffect(() => onRenderError(render.error), [render.error]);\n\n  const onPreviousPage = () => {\n    setCurrentPage((prev) => prev - 1);\n  };\n\n  const onNextPage = () => {\n    setCurrentPage((prev) => prev + 1);\n  };\n\n  const onDocumentLoad = (d) => {\n    setNumPages(d.numPages);\n    setCurrentPage((prev) => Math.min(prev, d.numPages));\n  };\n\n  const isFirstRendering = !previousRenderValue;\n\n  const isLatestValueRendered = previousRenderValue === render.value;\n  const isBusy = render.loading || !isLatestValueRendered;\n\n  const shouldShowTextLoader = isFirstRendering && isBusy;\n  const shouldShowPreviousDocument = !isFirstRendering && isBusy;\n\n  return (\n    <Wrapper>\n      <Message active={shouldShowTextLoader}>Rendering PDF...</Message>\n\n      <Message active={!render.loading && !value}>\n        You are not rendering a valid document\n      </Message>\n\n      <DocumentWrapper>\n        {shouldShowPreviousDocument && previousRenderValue ? (\n          <Document\n            key={previousRenderValue}\n            className=\"previous-document\"\n            file={previousRenderValue}\n            loading={null}\n            renderForms={true}\n          >\n            <Page key={currentPage} pageNumber={currentPage} />\n          </Document>\n        ) : null}\n\n        <Document\n          key={render.value}\n          className={shouldShowPreviousDocument ? 'rendering-document' : null}\n          file={render.value}\n          loading={null}\n          onLoadSuccess={onDocumentLoad}\n        >\n          <Page\n            key={currentPage}\n            pageNumber={currentPage}\n            onRenderSuccess={() => setPreviousRenderValue(render.value)}\n            renderForms={true}\n          />\n        </Document>\n      </DocumentWrapper>\n\n      <PageNavigator\n        currentPage={currentPage}\n        numPages={numPages}\n        onNextPage={onNextPage}\n        onPreviousPage={onPreviousPage}\n      />\n    </Wrapper>\n  );\n};\n\nexport default PDFViewer;\n"
  },
  {
    "path": "src/components/Repl/PageNavigator.js",
    "content": "import React from 'react';\nimport styled from '@emotion/styled';\n\nimport Icon from '../UI/Icon';\n\nconst Wrapper = styled.div`\n  display: flex;\n  height: 64px;\n  align-items: center;\n  justify-content: center;\n  color: ${({ theme }) => theme.black};\n`;\n\nconst Arrow = styled(Icon)`\n  font-size: 17px;\n  cursor: pointer;\n  transition: opacity 0.3s;\n  opacity: ${(props) => (props.visible ? 1 : 0)};\n  pointer-events: ${(props) => (props.visible ? 'initial' : 'none')};\n`;\n\nconst PageIndicator = styled.span`\n  margin: 0px 12px;\n`;\n\nconst PageNavigator = ({\n  currentPage,\n  numPages,\n  onPreviousPage,\n  onNextPage,\n}) => {\n  if (numPages <= 1) return null;\n\n  return (\n    <Wrapper>\n      <Arrow\n        type=\"chevron-left\"\n        visible={currentPage !== 1}\n        onClick={onPreviousPage}\n      />\n\n      <PageIndicator>{`Page ${currentPage} / ${numPages}`}</PageIndicator>\n\n      <Arrow\n        type=\"chevron-right\"\n        visible={currentPage < numPages}\n        onClick={onNextPage}\n      />\n    </Wrapper>\n  );\n};\n\nexport default PageNavigator;\n"
  },
  {
    "path": "src/components/Repl/Repl.js",
    "content": "import dynamic from 'next/dynamic';\nimport styled from '@emotion/styled';\nimport { useMount } from 'react-use';\nimport debounce from 'lodash.debounce';\nimport React, { useCallback, useState } from 'react';\n\nimport Spinner from '../UI/Spinner';\nimport media from '../../styled/media';\nimport CodeEditor from './CodeEditor';\nimport ErrorMessage from './ErrorMessage';\nimport transpile from '../../lib/transpile';\n\nconst PDFViewerWithNoSSR = dynamic(import('./PDFViewer'), { ssr: false });\n\nconst debounceTranspile = debounce(transpile, 250);\n\nconst Wrapper = styled.div`\n  flex: 1;\n  display: flex;\n  position: relative;\n  max-height: calc(100vh - 54px);\n\n  ${media.desktop} {\n    display: initial;\n    max-height: calc(100vh - 45px);\n  }\n`;\n\nconst CodePanel = styled.div`\n  flex: 1;\n  overflow: hidden;\n  position: relative;\n\n  ${media.desktop} {\n    width: 100%;\n    height: 100%;\n    position: absolute;\n    z-index: ${(props) => (props.active ? 500 : 250)};\n  }\n`;\n\nconst PDFPanel = styled.div`\n  flex: 1;\n  overflow: auto;\n  background-color: #fff;\n\n  ${media.desktop} {\n    width: 100%;\n    height: 100%;\n    position: absolute;\n    z-index: ${(props) => (props.active ? 500 : 250)};\n  }\n`;\n\nconst CodeError = styled(ErrorMessage)`\n  bottom: 0;\n  width: 100%;\n  z-index: 1000;\n  position: absolute;\n`;\n\nconst Repl = ({ activeTab, value, onChange, onUrlChange }) => {\n  const [error, setError] = useState(null);\n\n  const [element, setElement] = useState(null);\n\n  const [loading, setLoading] = useState(true);\n\n  const onErrorClose = () => {\n    setError(null);\n  };\n\n  const handleEditorLoaded = () => {\n    setLoading(false);\n  };\n\n  const handleChange = useCallback(\n    (code) => {\n      if (code.length === 0) {\n        setError(null);\n        setElement(null);\n      }\n\n      const callback = value => {\n        onChange?.(code);\n        setElement(value);\n      }\n\n      debounceTranspile(code, callback, setError);\n    },\n    [onChange],\n  );\n\n  useMount(() => {\n    if (value) debounceTranspile(value, setElement, setError);\n  })\n\n  return (\n    <>\n      {loading && <Spinner />}\n\n      <Wrapper>\n        <CodePanel active={activeTab === 'code'}>\n          <CodeEditor\n            value={value}\n            onChange={handleChange}\n            onLoad={handleEditorLoaded}\n          />\n          <CodeError onClose={onErrorClose}>{error}</CodeError>\n        </CodePanel>\n\n        <PDFPanel active={activeTab === 'pdf'}>\n          <PDFViewerWithNoSSR\n            value={element}\n            onUrlChange={onUrlChange}\n            onRenderError={setError}\n          />\n        </PDFPanel>\n      </Wrapper>\n    </>\n  );\n};\n\nexport default Repl;\n"
  },
  {
    "path": "src/components/Repl/ReplFooter.js",
    "content": "import React from 'react';\nimport styled from '@emotion/styled';\nimport ReactPDF from '@react-pdf/renderer';\n\nimport Button from '../UI/Button';\nimport Clipboard from '../UI/Clipboard';\nimport media from '../../styled/media';\n\nconst Wrapper = styled.div`\n  height: 56px;\n  color: white;\n  padding: 8px;\n  display: flex;\n  align-items: center;\n  background: ${({ theme }) => theme.red};\n\n  ${media.phone} {\n    height: 45px;\n    padding: 0px;\n    justify-content: flex-end;\n  }\n`;\n\nconst Title = styled.h2`\n  margin-left: 25px;\n  font-size: 16px;\n  font-weight: 500;\n  line-height: 24px;\n  display: inline-block;\n  font-family: 'Taviraj';\n\n  ${media.phone} {\n    display: none;\n  }\n`;\n\nconst Version = styled.p`\n  flex: 1;\n  margin-left: 25px;\n  font-size: 12px;\n  font-weight: 500;\n  display: inline-block;\n\n  ${media.phone} {\n    display: none;\n  }\n`;\n\nconst BannerButton = styled(Button)`\n  margin-right: 16px;\n`;\n\nconst ReplFooter = ({ documentUrl, shareUrl, code }) => (\n  <Wrapper>\n    <Title>React-PDF Repl</Title>\n    <Version>{ReactPDF.version}</Version>\n    {documentUrl && (\n      <BannerButton\n        icon=\"download\"\n        href={documentUrl}\n        target=\"_blank\"\n        download=\"document.pdf\"\n        secondary\n      >\n        Download\n      </BannerButton>\n    )}\n    <Clipboard text={shareUrl} tooltip=\"URL copied to clipboard!\">\n      <BannerButton icon=\"share-alt\" component=\"button\" secondary>\n        Share\n      </BannerButton>\n    </Clipboard>\n    <Clipboard text={code} tooltip=\"Code copied to clipboard!\">\n      <BannerButton icon=\"copy\" component=\"button\" secondary>\n        Copy\n      </BannerButton>\n    </Clipboard>\n  </Wrapper>\n);\n\nexport default ReplFooter;\n"
  },
  {
    "path": "src/components/Repl/ReplHeader.js",
    "content": "import React from 'react';\nimport styled from '@emotion/styled';\n\nimport Icon from '../UI/Icon';\nimport BackButton from './BackButton';\nimport media from '../../styled/media';\n\nconst Wrapper = styled.div`\n  height: 56px;\n  color: white;\n  display: none;\n  flex-direction: row;\n  justify-content: space-between;\n  background: ${({ theme }) => theme.red};\n\n  ${media.desktop} {\n    display: flex;\n  }\n\n  ${media.phone} {\n    height: 45px;\n  }\n`;\n\nconst Back = styled(BackButton)`\n  border: 0px;\n  width: 56px;\n  color: white;\n  display: flex;\n  outline: none;\n  cursor: pointer;\n  align-items: center;\n  text-decoration: none;\n  justify-content: center;\n  background: transparent;\n`;\n\nconst Tabs = styled.div`\n  flex: 1;\n  display: flex;\n  max-width: 250px;\n`;\n\nconst Tab = styled.button`\n  flex: 1;\n  border: 0px;\n  color: white;\n  outline: none;\n  cursor: pointer;\n  font-size: 16px;\n  text-decoration: none;\n  font-family: 'Source Sans Pro';\n  transition: color 0.2s, background 0.2s;\n  opacity: ${({ active }) => (active ? 0.8 : 1)};\n  background: ${({ active, theme }) =>\n    active ? theme.darkRed : 'transparent'};\n`;\n\nconst ReplHeader = ({ activeTab, onTabClick }) => (\n  <Wrapper>\n    <Back>\n      <Icon type=\"arrow-left\" label=\"Back\" size={18} />\n    </Back>\n    <Tabs>\n      <Tab active={activeTab === 'code'} onClick={() => onTabClick('code')}>\n        Code\n      </Tab>\n      <Tab active={activeTab === 'pdf'} onClick={() => onTabClick('pdf')}>\n        PDF\n      </Tab>\n    </Tabs>\n  </Wrapper>\n);\n\nexport default ReplHeader;\n"
  },
  {
    "path": "src/components/Repl/index.js",
    "content": "import Repl from './Repl';\n\nexport default Repl;\n"
  },
  {
    "path": "src/components/UI/Blockquote/Blockquote.js",
    "content": "import styled from '@emotion/styled';\n\nconst Blockquote = styled.blockquote`\n  padding: 8px 30px;\n  margin: 32px 0px;\n  border-radius: 0 6px 6px 0;\n  background-color: ${({ theme }) => theme.gray3};\n  border-left: ${({ theme }) => `2px solid ${theme.red}`};\n\n  p {\n    margin: 0px;\n  }\n`;\n\nexport default Blockquote;\n"
  },
  {
    "path": "src/components/UI/Blockquote/index.js",
    "content": "import Blockquote from './Blockquote';\n\nexport default Blockquote;\n"
  },
  {
    "path": "src/components/UI/Button/Button.js",
    "content": "import React from 'react';\nimport { css } from '@emotion/core';\nimport styled from '@emotion/styled';\nimport { defaultProps, componentFromProp } from 'recompose';\n\nimport Icon from '../Icon';\n\nconst PropComponent = defaultProps({ component: 'a' })(\n  componentFromProp('component'),\n);\n\nconst Wrapper = styled(PropComponent)`\n  border: 0px;\n  outline: none;\n  cursor: pointer;\n  font-size: 16px;\n  padding: 4px 16px;\n  line-height: 24px;\n  white-space: nowrap;\n  text-decoration: none;\n  font-family: 'Source Sans Pro';\n  transition: color 0.2s, background 0.2s;\n\n  &:hover {\n    outline-width: 2px;\n  }\n\n  ${(props) =>\n    props.primary &&\n    css`\n      color: ${props.theme.red};\n      background: white;\n      outline: 1px solid ${props.theme.red};\n\n      &:active {\n        color: white;\n        background: ${props.theme.red};\n      }\n    `}\n\n  ${(props) =>\n    props.secondary &&\n    css`\n      color: white;\n      background: ${props.theme.red};\n      outline: 1px solid white;\n\n      &:active {\n        color: ${props.theme.red};\n        background: white;\n      }\n    `}\n\n  ${(props) =>\n    props.terciary &&\n    css`\n      color: ${props.theme.gray1};\n      background: white;\n      outline: 1px solid ${props.theme.gray1};\n\n      &:active {\n        color: white;\n        background: ${props.theme.gray1};\n      }\n    `}\n`;\n\nconst ButtonIcon = styled(Icon)`\n  margin-left: 10px;\n`;\n\nconst Button = ({ icon, children, ...props }, ref) => (\n  <Wrapper {...props} ref={ref}>\n    <span>{children}</span>\n    {icon && <ButtonIcon type={icon} />}\n  </Wrapper>\n);\n\nButton.defaultProps = {\n  icon: null,\n  children: '',\n};\n\nexport default React.forwardRef(Button);\n"
  },
  {
    "path": "src/components/UI/Button/index.js",
    "content": "import Button from './Button';\n\nexport default Button;\n"
  },
  {
    "path": "src/components/UI/Clipboard/Clipboard.js",
    "content": "import React, { useState } from 'react';\nimport { Tooltip } from 'react-tippy';\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\n\nconst Clipboard = ({ tooltip, children, ...props }) => {\n  const [copied, setCopied] = useState(false);\n\n  const onCopy = () => {\n    setCopied(true);\n\n    setTimeout(() => {\n      setCopied(false);\n    }, 2000);\n  };\n\n  return (\n    <Tooltip open={copied} title={tooltip} position=\"top\" arrow>\n      <CopyToClipboard onCopy={onCopy} {...props}>\n        {children}\n      </CopyToClipboard>\n    </Tooltip>\n  );\n};\n\nexport default Clipboard;\n"
  },
  {
    "path": "src/components/UI/Clipboard/index.js",
    "content": "import Clipboard from './Clipboard';\n\nexport default Clipboard;\n"
  },
  {
    "path": "src/components/UI/CodeBlock/CodeBlock.js",
    "content": "import React from 'react';\nimport Prism from 'prismjs';\nimport styled from '@emotion/styled';\nimport { PrismCode } from 'react-prism';\n\nimport media from '../../../styled/media';\n\nconst Wrapper = styled.div`\n  position: relative;\n  border-radius: 8px;\n  margin-bottom: 40px;\n  padding: 24px 20px;\n  border-radius: 4px;\n  background-color: ${({ theme }) => theme.black};\n\n  ${media.phone} {\n    padding: 18px 14px;\n    margin-bottom: 30px;\n  }\n`;\n\nconst Code = styled(PrismCode)`\n  color: #e7e7e7;\n  font-size: 16px;\n  line-height: 24px;\n\n  ${media.phone} {\n    font-size: 15px;\n    line-height: 20px;\n  }\n`;\n\nconst CodeBlock = ({ language, children }) => (\n  <Wrapper>\n    <pre>\n      <Code className={`language-${language}`}>{children}</Code>\n    </pre>\n  </Wrapper>\n);\n\nCodeBlock.defaultProps = {\n  language: 'jsx',\n  isPlayable: false,\n};\n\nexport default CodeBlock;\n"
  },
  {
    "path": "src/components/UI/CodeBlock/index.js",
    "content": "import CodeBlock from './CodeBlock';\n\nexport default CodeBlock;\n"
  },
  {
    "path": "src/components/UI/Heading/Heading.js",
    "content": "import React from 'react';\nimport { css } from '@emotion/core';\nimport styled from '@emotion/styled';\nimport { withProps } from 'recompose';\n\nimport media from '../../../styled/media';\nimport toLowerCase from '../../../lib/toLowerCase';\n\nconst BaseHeading = css`\n  font-family: 'Taviraj';\n  margin-bottom: 16px;\n  color: ${({ theme }) => theme.black};\n\n  code {\n    vertical-align: middle;\n  }\n`;\n\nconst Heading1 = styled.h1`\n  ${BaseHeading};\n  font-size: 48px;\n  font-weight: 200;\n  line-height: 56px;\n  letter-spacing: 2px;\n\n  ${media.tablet} {\n    font-size: 30px;\n    font-weight: 400;\n  }\n`;\n\nconst Heading2 = styled.h2`\n  ${BaseHeading};\n  font-size: 32px;\n  font-weight: 500;\n  letter-spacing: 1px;\n  line-height: 40px;\n  margin-bottom: 24px;\n\n  ${media.phone} {\n    font-size: 22px;\n    line-height: 28px;\n    margin-bottom: 17px;\n  }\n`;\n\nconst Heading3 = styled.h3`\n  ${BaseHeading};\n  font-size: 24px;\n  font-weight: 500;\n  letter-spacing: 1px;\n  line-height: 32px;\n  padding-top: 12px;\n  margin-bottom: 24px;\n\n  ${media.phone} {\n    font-size: 20px;\n    line-height: 28px;\n    margin-bottom: 21px;\n  }\n`;\n\nconst Heading4 = styled.h4`\n  ${BaseHeading};\n  font-size: 20px;\n  font-weight: 500;\n  line-height: 24px;\n\n  ${media.phone} {\n    font-size: 16px;\n  }\n`;\n\nconst Heading5 = styled.h5`\n  ${BaseHeading};\n  font-size: 16px;\n  font-weight: 500;\n  line-height: 24px;\n  color: ${({ theme }) => theme.darkRed};\n`;\n\nconst Heading6 = styled.h6`\n  ${BaseHeading};\n  color: ${({ theme }) => theme.gray1};\n  font-size: 16px;\n  font-weight: 500;\n  line-height: 24px;\n`;\n\nconst Headings = [Heading1, Heading2, Heading3, Heading4, Heading5, Heading6];\n\nconst getId = (children) => {\n  const child = Array.isArray(children) ? children[0] : children;\n  const text = React.isValidElement(child) ? child.props.children : child;\n  return toLowerCase(text || '');\n};\n\nconst Heading = ({ level, children, ...props }) => {\n  const HeadingComponent = Headings[level - 1];\n\n  return (\n    <HeadingComponent id={getId(children)} {...props}>\n      {children}\n    </HeadingComponent>\n  );\n};\n\nexport const H1 = withProps({ level: 1 })(Heading);\nexport const H2 = withProps({ level: 2 })(Heading);\nexport const H3 = withProps({ level: 3 })(Heading);\nexport const H4 = withProps({ level: 4 })(Heading);\nexport const H5 = withProps({ level: 5 })(Heading);\nexport const H6 = withProps({ level: 6 })(Heading);\n"
  },
  {
    "path": "src/components/UI/Heading/index.js",
    "content": "export * from './Heading';\n"
  },
  {
    "path": "src/components/UI/Icon/Icon.js",
    "content": "/* eslint-disable jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */\nimport React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n  faEye,\n  faCopy,\n  faCogs,\n  faSave,\n  faFile,\n  faBars,\n  faShareAlt,\n  faDownload,\n  faParagraph,\n  faArrowLeft,\n  faPaintBrush,\n  faChevronDown,\n  faBorderStyle,\n  faChevronLeft,\n  faChevronRight,\n  faArrowRight,\n  faTimes,\n} from '@fortawesome/free-solid-svg-icons';\n\nimport { faGithub } from '@fortawesome/free-brands-svg-icons';\n\nexport const BUNDLED_ICON_TYPES = {\n  eye: faEye,\n  cogs: faCogs,\n  copy: faCopy,\n  menu: faBars,\n  save: faSave,\n  file: faFile,\n  close: faTimes,\n  github: faGithub,\n  download: faDownload,\n  paragraph: faParagraph,\n  'share-alt': faShareAlt,\n  'arrow-left': faArrowLeft,\n  'arrow-right': faArrowRight,\n  'paint-brush': faPaintBrush,\n  'border-style': faBorderStyle,\n  'chevron-left': faChevronLeft,\n  'chevron-down': faChevronDown,\n  'chevron-right': faChevronRight,\n};\n\nconst Icon = ({\n  type,\n  opacity,\n  size = 14,\n  className,\n  style = {},\n  onClick,\n  ...props\n}) => {\n  if (!BUNDLED_ICON_TYPES[type]) {\n    console.warn(`${type} icon type not included in bundle.`);\n    return null;\n  }\n\n  if (onClick) {\n    return (\n      <a onClick={onClick} className={className} style={{ cursor: 'pointer' }}>\n        <FontAwesomeIcon\n          icon={BUNDLED_ICON_TYPES[type]}\n          style={{ opacity, width: size, height: size, ...style }}\n          {...props}\n        />\n      </a>\n    );\n  }\n\n  return (\n    <FontAwesomeIcon\n      className={className}\n      icon={BUNDLED_ICON_TYPES[type]}\n      style={{ opacity, width: size, height: size, ...style }}\n      {...props}\n    />\n  );\n};\n\nexport default Icon;\n"
  },
  {
    "path": "src/components/UI/Icon/index.js",
    "content": "import Icon from './Icon';\n\nexport default Icon;\n"
  },
  {
    "path": "src/components/UI/InlineCode/InlineCode.js",
    "content": "import styled from '@emotion/styled';\n\nconst InlineCode = styled.code`\n  font-size: 16px;\n  padding: 4px 6px;\n  line-height: 24px;\n  border-radius: 4px;\n  white-space: nowrap;\n  color: ${({ theme }) => theme.darkRed};\n  background-color: ${({ theme }) => theme.lightRed};\n`;\n\nexport default InlineCode;\n"
  },
  {
    "path": "src/components/UI/InlineCode/index.js",
    "content": "import InlineCode from './InlineCode';\n\nexport default InlineCode;\n"
  },
  {
    "path": "src/components/UI/Link/Link.js",
    "content": "import styled from '@emotion/styled';\n\nconst Wrapper = styled.a`\n  font-size: inherit;\n  line-height: 24px;\n  text-decoration: none;\n  color: ${({ theme }) => theme.red};\n`;\n\nconst getHostName = (url) => {\n  if (/^https?:\\/\\//.test(url)) {\n    const parser = document.createElement('a');\n    parser.href = url;\n    return parser.hostname;\n  } else {\n    return window.location.hostname;\n  }\n};\n\nconst isExternal = (url) => {\n  if (!process.browser) return false;\n\n  const host = window.location.hostname;\n  const linkHost = getHostName(url);\n  return host !== linkHost;\n};\n\nconst Link = ({ href, ...props }) => {\n  const target = isExternal(href) ? '__blank' : undefined;\n  return <Wrapper href={href} target={target} {...props} />;\n};\n\nexport default Link;\n"
  },
  {
    "path": "src/components/UI/Link/index.js",
    "content": "import Link from './Link';\n\nexport default Link;\n"
  },
  {
    "path": "src/components/UI/List/List.js",
    "content": "import React from 'react';\nimport { css } from '@emotion/core';\nimport styled from '@emotion/styled';\n\nimport media from '../../../styled/media';\n\nconst OL = styled.ol`\n  margin-left: 12px;\n  margin-bottom: 32px;\n  list-style-position: inside;\n\n  ${props => props.collapse && css`\n    column-count: 3;\n    column-gap: 20px;\n\n    ${media.desktop} {\n      column-count: 2;\n    }\n\n    ${media.phone} {\n      column-count: 1;\n      column-gap: 0px;\n    }\n  `}\n`;\n\nconst UL = styled.ul`\n  margin-left: 12px;\n  margin-bottom: 32px;\n  list-style-position: inside;\n\n  ${props => props.collapse && css`\n    column-count: 3;\n    column-gap: 20px;\n\n    ${media.desktop}{\n      column-count: 2;\n    }\n\n    ${media.phone} {\n      column-count: 1;\n      column-gap: 0px;\n    }\n  `}\n`;\n\nconst List = ({ ordered, children, ...props }) => {\n  const Component = ordered ? OL : UL;\n  const amountOfItems = children.filter(i => typeof i !== 'string').length\n\n  return <Component collapse={amountOfItems > 3} {...props}>{children}</Component>;\n};\n\nexport default List;\n"
  },
  {
    "path": "src/components/UI/List/index.js",
    "content": "import List from './List';\n\nexport default List;\n"
  },
  {
    "path": "src/components/UI/ListItem/ListItem.js",
    "content": "import styled from '@emotion/styled';\n\nimport media from '../../../styled/media';\n\nconst ListItem = styled.li`\n  color: ${({ theme }) => theme.black};\n  font-size: 20px;\n  line-height: 36px;\n  font-family: 'Source Sans Pro';\n\n  ${media.phone} {\n    font-size: 16px;\n    line-height: 16px;\n    margin-bottom: 1.3em;\n  }\n`;\n\nexport default ListItem;\n"
  },
  {
    "path": "src/components/UI/ListItem/index.js",
    "content": "import ListItem from './ListItem';\n\nexport default ListItem;\n"
  },
  {
    "path": "src/components/UI/Logo/Logo.js",
    "content": "import React from 'react';\nimport styled from '@emotion/styled';\nimport { keyframes } from '@emotion/core';\n\nimport { H1 } from '../Heading';\n\nconst rotate360 = keyframes`\n  from { transform: rotate(0deg); }\n  to { transform: rotate(360deg); }\n`;\n\nconst Wrapper = styled.div`\n  padding: 56px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n`;\n\nconst LogoImage = styled.img`\n  width: ${(props) => props.size || '54px'};\n`;\n\nconst Title = styled(H1)`\n  margin: 0;\n  line-height: 22px;\n  font-size: ${(props) => props.fontSize || '22px'};\n  margin-left: ${(props) => props.separation || '15px'};\n`;\n\nconst Logo = ({ withText, className, rotate, ...props }, ref) => (\n  <Wrapper ref={ref} className={className}>\n    <LogoImage src=\"/images/logo.png\" rotateImg={rotate} {...props} />\n    {withText && <Title {...props}>React-pdf</Title>}\n  </Wrapper>\n);\n\nexport default React.forwardRef(Logo);\n"
  },
  {
    "path": "src/components/UI/Logo/index.js",
    "content": "import Logo from './Logo';\n\nexport default Logo;\n"
  },
  {
    "path": "src/components/UI/PageBanner/PageBanner.js",
    "content": "import React from 'react';\nimport styled from '@emotion/styled';\n\nconst Wrapper = styled.div`\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 50px;\n  display: flex;\n  z-index: 10000;\n  position: fixed;\n  font-size: 16px;\n  padding: 0 18px;\n  align-items: center;\n  justify-content: center;\n  background-color: ${props => props.theme.lightRed};\n\n  a {\n    margin-left: 5px;\n  }\n`;\n\nconst PageBanner = ({ children }) => {\n  return <Wrapper>{children}</Wrapper>;\n};\n\nexport default PageBanner;\n"
  },
  {
    "path": "src/components/UI/PageBanner/index.js",
    "content": "import PageBanner from './PageBanner';\n\nexport default PageBanner;\n"
  },
  {
    "path": "src/components/UI/Paragraph/Paragraph.js",
    "content": "import styled from '@emotion/styled';\n\nimport media from '../../../styled/media';\n\nconst Paragraph = styled.p`\n  font-size: 20px;\n  line-height: 32px;\n  margin-bottom: 32px;\n  color: ${({ theme }) => theme.black};\n\n  ${media.phone} {\n    font-size: 16px;\n    margin-bottom: 1.3em;\n  }\n`;\n\nexport default Paragraph;\n"
  },
  {
    "path": "src/components/UI/Paragraph/index.js",
    "content": "import Paragraph from './Paragraph';\n\nexport default Paragraph;\n"
  },
  {
    "path": "src/components/UI/Spinner/Spinner.js",
    "content": "import React from 'react';\nimport styled from '@emotion/styled';\n\nimport Logo from '../Logo';\n\nconst Wrapper = styled.div`\n  top: 0;\n  left: 0;\n  width: 100vw;\n  height: 100vh;\n  display: flex;\n  z-index: 9999;\n  position: absolute;\n  align-items: center;\n  background-color: #fff;\n  justify-content: center;\n`;\n\nconst Spinner = () => (\n  <Wrapper>\n    <Logo size=\"100px\" rotate />\n  </Wrapper>\n);\n\nexport default Spinner;\n"
  },
  {
    "path": "src/components/UI/Spinner/index.js",
    "content": "import Spinner from './Spinner';\n\nexport default Spinner;\n"
  },
  {
    "path": "src/components/UI/Table/Table.js",
    "content": "import styled from '@emotion/styled';\n\nimport media from '../../../styled/media';\n\nconst Wrapper = styled.div`\n  width: 100%;\n  overflow-x: auto;\n  overflow-y: hidden;\n  margin-bottom: 48px;\n  border-bottom-left-radius: 12px;\n  border-bottom-right-radius: 12px;\n  box-shadow: 0 25px 50px 0 rgba(62, 62, 62, 0.15);\n`;\n\nconst Table = styled.table`\n  width: 100%;\n  font-size: 16px;\n  overflow: hidden;\n  line-height: 24px;\n`;\n\nexport const TableHeading = styled.th`\n  text-align: left;\n  padding: 5px 11px;\n  border-right: 0px;\n  font-family: 'Taviraj';\n  border: 1px solid rgba(141, 22, 2, 0.2);\n  color: ${({ theme }) => theme.darkRed};\n  background-color: ${({ theme }) => theme.lightRed};\n\n  &:first-child {\n    border-top-left-radius: 6px;\n  }\n\n  &:last-child {\n    border-top-right-radius: 6px;\n    border-right: 1px solid rgba(141, 22, 2, 0.2);\n  }\n\n  ${media.phone} {\n    font-size: 14px;\n    padding: 5px 8px;\n  }\n`;\n\nexport const TableCell = styled.td`\n  font-size: 16px;\n  line-height: 24px;\n  padding: 5px 11px;\n  border-right: 0px;\n  border-bottom: 0px;\n  font-family: 'Source Sans Pro';\n  border: 1px solid rgba(166, 166, 166, 0.2);\n\n  &:last-child {\n    border-right: 1px solid rgba(166, 166, 166, 0.2);\n  }\n\n  code {\n    font-size: 10px;\n    padding: 2px 4px;\n    white-space: nowrap;\n  }\n\n  em {\n    white-space: nowrap;\n  }\n\n  ${media.phone} {\n    font-size: 14px;\n    padding: 5px 8px;\n  }\n`;\n\nexport const TableRow = styled.tr`\n  &:nth-child(even) {\n    background-color: white;\n  }\n\n  &:nth-child(odd) {\n    background-color: #fbfbfb;\n  }\n`;\n\nexport default ({ children }) => (\n  <Wrapper>\n    <Table cellSpacing={0}>{children}</Table>\n  </Wrapper>\n);\n"
  },
  {
    "path": "src/components/UI/Table/index.js",
    "content": "import Table from './Table';\n\nexport * from './Table';\nexport default Table;\n"
  },
  {
    "path": "src/components/UI/ThematicBreak/ThematicBreak.js",
    "content": "import styled from '@emotion/styled';\n\nconst ThematicBreak = styled.hr`\n  width: 20px;\n  margin-top: 33px;\n  margin-bottom: 48px;\n`;\n\nexport default ThematicBreak;\n"
  },
  {
    "path": "src/components/UI/ThematicBreak/index.js",
    "content": "import ThematicBreak from './ThematicBreak';\n\nexport default ThematicBreak;\n"
  },
  {
    "path": "src/components/UI/Title/Title.js",
    "content": "import React from 'react';\nimport styled from '@emotion/styled';\n\nimport { H1, H4 } from '..//Heading';\nimport media from '../../../styled/media';\n\nconst Wrapper = styled.div`\n  padding-left: 32px;\n  position: relative;\n  border-left: ${({ theme }) => `2px solid ${theme.red}`};\n\n  ${media.phone} {\n    padding-left: 25px;\n  }\n\n  &::after {\n    top: calc(50% - 8px);\n    left: -8px;\n    content: '';\n    position: absolute;\n    width: 0;\n    height: 0;\n    border-top: 8px solid transparent;\n    border-bottom: 8px solid transparent;\n    border-right: ${({ theme }) => `8px solid ${theme.red}`};\n  }\n`;\n\nconst Main = styled(H1)`\n  margin: 0;\n\n  ${media.phone} {\n    display: none;\n  }\n`;\n\nconst SubHeading = styled(H4)`\n  margin: 0px !important;\n  font-family: Source Sans Pro !important;\n`;\n\nconst Title = () => (\n  <Wrapper>\n    <Main>React-pdf</Main>\n    <SubHeading>\n      React renderer for creating PDF files on the browser and server.\n    </SubHeading>\n  </Wrapper>\n);\n\nexport default Title;\n"
  },
  {
    "path": "src/components/UI/Title/index.js",
    "content": "import Title from './Title';\n\nexport default Title;\n"
  },
  {
    "path": "src/lib/compress.js",
    "content": "import LZString from 'lz-string';\n\nconst decimalToHex = (d) => {\n  let hex = Number(d).toString(16);\n  const padding = 2;\n\n  while (hex.length < padding) {\n    hex = `0${hex}`;\n  }\n\n  return hex;\n};\n\nconst hexToDecimal = (h) => parseInt(h, 16);\n\nexport const compress = (str) => {\n  return LZString.compressToUint8Array(str).reduce(\n    (acc, value) => `${acc}${decimalToHex(value)}`,\n    '',\n  );\n};\n\nexport const decompress = (str) => {\n  const compressed = str.match(/.{2}/g).map(hexToDecimal);\n  return LZString.decompressFromUint8Array(compressed);\n};\n"
  },
  {
    "path": "src/lib/markdown.js",
    "content": "import Link from '../components/UI/Link';\nimport List from '../components/UI/List';\nimport ListItem from '../components/UI/ListItem';\nimport Paragraph from '../components/UI/Paragraph';\nimport CodeBlock from '../components/UI/CodeBlock';\nimport InlineCode from '../components/UI/InlineCode';\nimport Blockquote from '../components/UI/Blockquote';\nimport ThematicBreak from '../components/UI/ThematicBreak';\nimport { H1, H2, H3, H4, H5, H6 } from '../components/UI/Heading';\nimport Table, { TableRow, TableCell, TableHeading } from '../components/UI/Table';\n\nconst components = {\n  h1: H1,\n  h2: H2,\n  h3: H3,\n  h4: H4,\n  h5: H5,\n  h6: H6,\n  a: Link,\n  ul: List,\n  table: Table,\n  p: Paragraph,\n  tr: TableRow,\n  li: ListItem,\n  td: TableCell,\n  pre: CodeBlock,\n  th: TableHeading,\n  hr: ThematicBreak,\n  inlineCode: InlineCode,\n  blockquote: Blockquote,\n};\n\nexport default components;\n"
  },
  {
    "path": "src/lib/toLowerCase.js",
    "content": "export default string => string.trim().toLowerCase().replace(/ /g, '-');\n"
  },
  {
    "path": "src/lib/transpile.js",
    "content": "import React from 'react';\nimport { transform } from 'buble';\nimport {\n  Page,\n  Text,\n  Link,\n  Font,\n  View,\n  Canvas,\n  Note,\n  Image,\n  G,\n  Svg,\n  Path,\n  Rect,\n  Line,\n  Stop,\n  Defs,\n  Tspan,\n  Circle,\n  Ellipse,\n  Polygon,\n  Polyline,\n  ClipPath,\n  LinearGradient,\n  RadialGradient,\n  FieldSet,\n  TextInput,\n  Select,\n  Checkbox,\n  List,\n  StyleSheet,\n} from '@react-pdf/renderer';\nimport { Math } from '@react-pdf/math';\n\nconst Document = 'DOCUMENT';\n\nconst primitives = {\n  Document,\n  Page,\n  Text,\n  Link,\n  Font,\n  View,\n  Note,\n  Image,\n  Canvas,\n  G,\n  Svg,\n  Path,\n  Rect,\n  Line,\n  Stop,\n  Defs,\n  Tspan,\n  Circle,\n  Ellipse,\n  Polygon,\n  Polyline,\n  ClipPath,\n  LinearGradient,\n  RadialGradient,\n  FieldSet,\n  TextInput,\n  Select,\n  Checkbox,\n  List,\n  Math,\n  StyleSheet,\n};\n\nconst transpile = (code, callback, onError) => {\n  try {\n    const result = transform(code, {\n      objectAssign: 'Object.assign',\n      transforms: {\n        dangerousForOf: true,\n        dangerousTaggedTemplateString: true,\n      },\n    });\n\n    const res = new Function(\n      'React',\n      'ReactPDF',\n      ...Object.keys(primitives),\n      result.code,\n    );\n\n    res(\n      React,\n      { render: (doc) => callback(doc) },\n      ...Object.values(primitives),\n    );\n  } catch (e) {\n    if (onError) {\n      onError(e);\n    }\n  }\n};\n\nexport default transpile;\n"
  },
  {
    "path": "src/styled/media.js",
    "content": "export default {\n  desktop: `@media (max-width: ${992}px)`,\n  tablet: `@media (max-width: ${768}px)`,\n  phone: `@media (max-width: ${576}px)`,\n};\n"
  },
  {
    "path": "src/styled/theme.js",
    "content": "const theme = {\n  black: '#3E3E3E',\n  gray1: '#A6A6A6',\n  gray2: '#F1F1F1',\n  gray3: '#F8F8F8',\n  red: '#F22300',\n  lightRed: '#FCD3CC',\n  darkRed: '#8D1602',\n  blue: '#4F8FED',\n};\n\nexport default theme;\n"
  }
]